]> git.sur5r.net Git - bacula/bacula/commitdiff
- Fix cancel bug in FD on /lib/tls with zero pid in
authorKern Sibbald <kern@sibbald.com>
Mon, 15 Nov 2004 22:43:33 +0000 (22:43 +0000)
committerKern Sibbald <kern@sibbald.com>
Mon, 15 Nov 2004 22:43:33 +0000 (22:43 +0000)
  pthread_kill.
- Add date/time to all messages.
- Make Qmsg use time message was queued rather than time
  printed.
- Indent job output two spaces.

git-svn-id: https://bacula.svn.sourceforge.net/svnroot/bacula/trunk@1698 91ce42f0-d328-0410-95d8-f526ca767f89

17 files changed:
bacula/kernstodo
bacula/src/baconfig.h
bacula/src/dird/admin.c
bacula/src/dird/backup.c
bacula/src/dird/mac.c
bacula/src/dird/restore.c
bacula/src/dird/verify.c
bacula/src/filed/backup.c
bacula/src/filed/verify.c
bacula/src/lib/attr.c
bacula/src/lib/btime.c
bacula/src/lib/btime.h
bacula/src/lib/jcr.c
bacula/src/lib/message.c
bacula/src/lib/message.h
bacula/src/lib/protos.h
bacula/src/version.h

index 429c4dcbc224e4880961911cb1c4f1d3816e5d47..e6df3623ea4f875b474dab8bb6436e40145f4092 100644 (file)
@@ -11,12 +11,14 @@ Version 1.37                Kern (see below)
 ========================================================
 
 For 1.36.1:
-- Fix CDROM make script to permit picking up already installed
-  static FD.
+- Fix orphanned buffers:
+   Orphaned buffer:      24 bytes allocated at line 808 of rufus-dir job.c
+   Orphaned buffer:      40 bytes allocated at line 45 of rufus-dir alist.c
 - Add dump of VolSessionId/Time and FileIndex with bls.
 - Add date/time to each Jmsg.
 
 1.37 Items:
+- Include within include
 - Implement a Pool of type Cleaning?
 - Implement VolReadTime and VolWriteTime in SD
 - Modify Backing up Your Database to include a bootstrap file.
@@ -981,3 +983,6 @@ Block Position: 0
 
 === Done
 - Add "Rerun failed levels = yes/no" to Job resource.
+- Fix CDROM make script to permit picking up already installed
+  static FD.
+
index b11a446bca2c563d411f34d5370f45a49d4b4478..da517642f6cd5b43eb48d5eacefbe09f996b17d2 100644 (file)
@@ -417,8 +417,8 @@ struct JCR;
 void d_msg(const char *file, int line, int level, const char *fmt,...);
 void p_msg(const char *file, int line, int level, const char *fmt,...);
 void e_msg(const char *file, int line, int type, int level, const char *fmt,...);
-void j_msg(const char *file, int line, JCR *jcr, int type, int level, const char *fmt,...);
-void q_msg(const char *file, int line, JCR *jcr, int type, int level, const char *fmt,...);
+void j_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...);
+void q_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...);
 int  m_msg(const char *file, int line, POOLMEM **msgbuf, const char *fmt,...);
 int  m_msg(const char *file, int line, POOLMEM *&pool_buf, const char *fmt, ...);
 
index db42e9af686e3737b44f83f927cef42e0b86edeb..b26ae18c9480158732bd6968ec79400eabd989c8 100644 (file)
@@ -105,11 +105,11 @@ static void admin_cleanup(JCR *jcr, int TermCode)
    bstrftime(edt, sizeof(edt), jcr->jr.EndTime);
 
    Jmsg(jcr, msg_type, 0, _("Bacula " VERSION " (" LSMDATE "): %s\n\
-JobId:                  %d\n\
-Job:                    %s\n\
-Start time:             %s\n\
-End time:               %s\n\
-Termination:            %s\n\n"),
+  JobId:                  %d\n\
+  Job:                    %s\n\
+  Start time:             %s\n\
+  End time:               %s\n\
+  Termination:            %s\n\n"),
        edt,
        jcr->jr.JobId,
        jcr->jr.Job,
@@ -118,4 +118,4 @@ Termination:            %s\n\n"),
        term_msg);
 
    Dmsg0(100, "Leave admin_cleanup()\n");
-}
+}   
index e14a156b0b93b705b4eba2dc575ceae074759c39..d2f97aff817e34f3d0440ba68f8fa2a75ea3b5c0 100644 (file)
@@ -442,30 +442,30 @@ static void backup_cleanup(JCR *jcr, int TermCode, char *since, FILESET_DBR *fsr
 // bmicrosleep(15, 0);               /* for debugging SIGHUP */
 
    Jmsg(jcr, msg_type, 0, _("Bacula " VERSION " (" LSMDATE "): %s\n\
-JobId:                  %d\n\
-Job:                    %s\n\
-Backup Level:           %s%s\n\
-Client:                 %s\n\
-FileSet:                \"%s\" %s\n\
-Pool:                   \"%s\"\n\
-Storage:                \"%s\"\n\
-Start time:             %s\n\
-End time:               %s\n\
-FD Files Written:       %s\n\
-SD Files Written:       %s\n\
-FD Bytes Written:       %s\n\
-SD Bytes Written:       %s\n\
-Rate:                   %.1f KB/s\n\
-Software Compression:   %s\n\
-Volume name(s):         %s\n\
-Volume Session Id:      %d\n\
-Volume Session Time:    %d\n\
-Last Volume Bytes:      %s\n\
-Non-fatal FD errors:    %d\n\
-SD Errors:              %d\n\
-FD termination status:  %s\n\
-SD termination status:  %s\n\
-Termination:            %s\n\n"),
+  JobId:                  %d\n\
+  Job:                    %s\n\
+  Backup Level:           %s%s\n\
+  Client:                 %s\n\
+  FileSet:                \"%s\" %s\n\
+  Pool:                   \"%s\"\n\
+  Storage:                \"%s\"\n\
+  Start time:             %s\n\
+  End time:               %s\n\
+  FD Files Written:       %s\n\
+  SD Files Written:       %s\n\
+  FD Bytes Written:       %s\n\
+  SD Bytes Written:       %s\n\
+  Rate:                   %.1f KB/s\n\
+  Software Compression:   %s\n\
+  Volume name(s):         %s\n\
+  Volume Session Id:      %d\n\
+  Volume Session Time:    %d\n\
+  Last Volume Bytes:      %s\n\
+  Non-fatal FD errors:    %d\n\
+  SD Errors:              %d\n\
+  FD termination status:  %s\n\
+  SD termination status:  %s\n\
+  Termination:            %s\n\n"),
        edt,
        jcr->jr.JobId,
        jcr->jr.Job,
index d8dec58e3bb5ca4f32926144489f0d0c63639f62..273ad0917d0c98f8c9c71154b7e15a34d2840370 100644 (file)
@@ -363,29 +363,29 @@ static void mac_cleanup(JCR *jcr, int TermCode, char *since, FILESET_DBR *fsr,
 // bmicrosleep(15, 0);               /* for debugging SIGHUP */
 
    Jmsg(jcr, msg_type, 0, _("Bacula " VERSION " (" LSMDATE "): %s\n\
-JobId:                  %d\n\
-Job:                    %s\n\
-Backup Level:           %s%s\n\
-Client:                 %s\n\
-FileSet:                \"%s\" %s\n\
-Pool:                   \"%s\"\n\
-Start time:             %s\n\
-End time:               %s\n\
-FD Files Written:       %s\n\
-SD Files Written:       %s\n\
-FD Bytes Written:       %s\n\
-SD Bytes Written:       %s\n\
-Rate:                   %.1f KB/s\n\
-Software Compression:   %s\n\
-Volume name(s):         %s\n\
-Volume Session Id:      %d\n\
-Volume Session Time:    %d\n\
-Last Volume Bytes:      %s\n\
-Non-fatal FD errors:    %d\n\
-SD Errors:              %d\n\
-FD termination status:  %s\n\
-SD termination status:  %s\n\
-Termination:            %s\n\n"),
+  JobId:                  %d\n\
+  Job:                    %s\n\
+  Backup Level:           %s%s\n\
+  Client:                 %s\n\
+  FileSet:                \"%s\" %s\n\
+  Pool:                   \"%s\"\n\
+  Start time:             %s\n\
+  End time:               %s\n\
+  FD Files Written:       %s\n\
+  SD Files Written:       %s\n\
+  FD Bytes Written:       %s\n\
+  SD Bytes Written:       %s\n\
+  Rate:                   %.1f KB/s\n\
+  Software Compression:   %s\n\
+  Volume name(s):         %s\n\
+  Volume Session Id:      %d\n\
+  Volume Session Time:    %d\n\
+  Last Volume Bytes:      %s\n\
+  Non-fatal FD errors:    %d\n\
+  SD Errors:              %d\n\
+  FD termination status:  %s\n\
+  SD termination status:  %s\n\
+  Termination:            %s\n\n"),
        edt,
        jcr->jr.JobId,
        jcr->jr.Job,
index 05006a24b19be55199426ada7802d556b663943e..2cf91aef5794b63fdb45881210d6ef2cc3e77793 100644 (file)
@@ -326,19 +326,19 @@ static void restore_cleanup(JCR *jcr, int TermCode)
    jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg));
 
    Jmsg(jcr, msg_type, 0, _("Bacula " VERSION " (" LSMDATE "): %s\n\
-JobId:                  %d\n\
-Job:                    %s\n\
-Client:                 %s\n\
-Start time:             %s\n\
-End time:               %s\n\
-Files Expected:         %s\n\
-Files Restored:         %s\n\
-Bytes Restored:         %s\n\
-Rate:                   %.1f KB/s\n\
-FD Errors:              %d\n\
-FD termination status:  %s\n\
-SD termination status:  %s\n\
-Termination:            %s\n\n"),
+  JobId:                  %d\n\
+  Job:                    %s\n\
+  Client:                 %s\n\
+  Start time:             %s\n\
+  End time:               %s\n\
+  Files Expected:         %s\n\
+  Files Restored:         %s\n\
+  Bytes Restored:         %s\n\
+  Rate:                   %.1f KB/s\n\
+  FD Errors:              %d\n\
+  FD termination status:  %s\n\
+  SD termination status:  %s\n\
+  Termination:            %s\n\n"),
        edt,
        jcr->jr.JobId,
        jcr->jr.Job,
index 304f7cafd38ece6867d362e66811bd85c32345ed..0a6fc56b0ba7a8a6bed9824eb2d0a9be704c153a 100644 (file)
@@ -419,21 +419,21 @@ static void verify_cleanup(JCR *jcr, int TermCode)
    if (jcr->JobLevel == L_VERIFY_VOLUME_TO_CATALOG) {
       jobstatus_to_ascii(jcr->SDJobStatus, sd_term_msg, sizeof(sd_term_msg));
       Jmsg(jcr, msg_type, 0, _("Bacula " VERSION " (" LSMDATE "): %s\n\
-JobId:                  %d\n\
-Job:                    %s\n\
-FileSet:                %s\n\
-Verify Level:           %s\n\
-Client:                 %s\n\
-Verify JobId:           %d\n\
-Verify Job:             %s\n\
-Start time:             %s\n\
-End time:               %s\n\
-Files Expected:         %s\n\
-Files Examined:         %s\n\
-Non-fatal FD errors:    %d\n\
-FD termination status:  %s\n\
-SD termination status:  %s\n\
-Termination:            %s\n\n"),
+  JobId:                  %d\n\
+  Job:                    %s\n\
+  FileSet:                %s\n\
+  Verify Level:           %s\n\
+  Client:                 %s\n\
+  Verify JobId:           %d\n\
+  Verify Job:             %s\n\
+  Start time:             %s\n\
+  End time:               %s\n\
+  Files Expected:         %s\n\
+  Files Examined:         %s\n\
+  Non-fatal FD errors:    %d\n\
+  FD termination status:  %s\n\
+  SD termination status:  %s\n\
+  Termination:            %s\n\n"),
         edt,
         jcr->jr.JobId,
         jcr->jr.Job,
@@ -452,19 +452,19 @@ Termination:            %s\n\n"),
         term_msg);
    } else {
       Jmsg(jcr, msg_type, 0, _("Bacula " VERSION " (" LSMDATE "): %s\n\
-JobId:                  %d\n\
-Job:                    %s\n\
-FileSet:                %s\n\
-Verify Level:           %s\n\
-Client:                 %s\n\
-Verify JobId:           %d\n\
-Verify Job:             %s\n\
-Start time:             %s\n\
-End time:               %s\n\
-Files Examined:         %s\n\
-Non-fatal FD errors:    %d\n\
-FD termination status:  %s\n\
-Termination:            %s\n\n"),
+  JobId:                  %d\n\
+  Job:                    %s\n\
+  FileSet:                %s\n\
+  Verify Level:           %s\n\
+  Client:                 %s\n\
+  Verify JobId:           %d\n\
+  Verify Job:             %s\n\
+  Start time:             %s\n\
+  End time:               %s\n\
+  Files Examined:         %s\n\
+  Non-fatal FD errors:    %d\n\
+  FD termination status:  %s\n\
+  Termination:            %s\n\n"),
         edt,
         jcr->jr.JobId,
         jcr->jr.Job,
index 6492cc31c9300eed4370d3f58c20c79816358feb..88fed3b615927de6c26ca0949c3f9e4d0313eaf1 100644 (file)
@@ -176,7 +176,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
    case FT_NOACCESS: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not access %s: ERR=%s\n"), ff_pkt->fname, 
+      Jmsg(jcr, M_NOTSAVED, 0, _("     Could not access %s: ERR=%s\n"), ff_pkt->fname, 
         be.strerror());
       jcr->Errors++;
       return 1;
@@ -184,7 +184,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
    case FT_NOFOLLOW: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not follow link %s: ERR=%s\n"), ff_pkt->fname, 
+      Jmsg(jcr, M_NOTSAVED, 0, _("     Could not follow link %s: ERR=%s\n"), ff_pkt->fname, 
         be.strerror());
       jcr->Errors++;
       return 1;
@@ -192,30 +192,30 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
    case FT_NOSTAT: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not stat %s: ERR=%s\n"), ff_pkt->fname, 
+      Jmsg(jcr, M_NOTSAVED, 0, _("     Could not stat %s: ERR=%s\n"), ff_pkt->fname, 
         be.strerror());
       jcr->Errors++;
       return 1;
    }
    case FT_DIRNOCHG:
    case FT_NOCHG:
-      Jmsg(jcr, M_SKIPPED, -1,  _("     Unchanged file skipped: %s\n"), ff_pkt->fname);
+      Jmsg(jcr, M_SKIPPED, 1, _("     Unchanged file skipped: %s\n"), ff_pkt->fname);
       return 1;
    case FT_ISARCH:
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Archive file not saved: %s\n"), ff_pkt->fname);
+      Jmsg(jcr, M_NOTSAVED, 0, _("     Archive file not saved: %s\n"), ff_pkt->fname);
       return 1;
    case FT_NORECURSE:
-      Jmsg(jcr, M_SKIPPED, -1,  _("     Recursion turned off. Directory skipped: %s\n"), 
+      Jmsg(jcr, M_SKIPPED, 1, _("     Recursion turned off. Directory skipped: %s\n"), 
         ff_pkt->fname);
       return 1;
    case FT_NOFSCHG:
-      Jmsg(jcr, M_SKIPPED, -1,  _("     File system change prohibited. Directory skipped. %s\n"), 
+      Jmsg(jcr, M_SKIPPED, 1, _("     File system change prohibited. Directory skipped. %s\n"), 
         ff_pkt->fname);
       return 1;
    case FT_NOOPEN: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not open directory %s: ERR=%s\n"), ff_pkt->fname, 
+      Jmsg(jcr, M_NOTSAVED, 0, _("     Could not open directory %s: ERR=%s\n"), ff_pkt->fname, 
         be.strerror());
       jcr->Errors++;
       return 1;
@@ -252,7 +252,7 @@ static int save_file(FF_PKT *ff_pkt, void *vjcr)
       if (bopen(&ff_pkt->bfd, ff_pkt->fname, O_RDONLY | O_BINARY, 0) < 0) {
         ff_pkt->ff_errno = errno;
         berrno be;
-         Jmsg(jcr, M_NOTSAVED, -1, _("     Cannot open %s: ERR=%s.\n"), ff_pkt->fname, 
+         Jmsg(jcr, M_NOTSAVED, 0, _("     Cannot open %s: ERR=%s.\n"), ff_pkt->fname, 
              be.strerror());
         jcr->Errors++;
         if (tid) {
index f11edb4c31be7627776d669cdec19c6d6cbdde27..ced83987720c3f12410461f638273963b7144b76 100644 (file)
@@ -111,41 +111,41 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt)
    case FT_NOACCESS: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not access %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
+      Jmsg(jcr, M_NOTSAVED, 1, _("     Could not access %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
       jcr->Errors++;
       return 1;
    }
    case FT_NOFOLLOW: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not follow link %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
+      Jmsg(jcr, M_NOTSAVED, 1, _("     Could not follow link %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
       jcr->Errors++;
       return 1;
    }
    case FT_NOSTAT: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not stat %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
+      Jmsg(jcr, M_NOTSAVED, 1, _("     Could not stat %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
       jcr->Errors++;
       return 1;
    }
    case FT_DIRNOCHG:
    case FT_NOCHG:
-      Jmsg(jcr, M_SKIPPED, -1, _("     Unchanged file skipped: %s\n"), ff_pkt->fname);
+      Jmsg(jcr, M_SKIPPED, 1, _("     Unchanged file skipped: %s\n"), ff_pkt->fname);
       return 1;
    case FT_ISARCH:
-      Jmsg(jcr, M_SKIPPED, -1, _("     Archive file skipped: %s\n"), ff_pkt->fname);
+      Jmsg(jcr, M_SKIPPED, 1, _("     Archive file skipped: %s\n"), ff_pkt->fname);
       return 1;
    case FT_NORECURSE:
-      Jmsg(jcr, M_SKIPPED, -1, _("     Recursion turned off. Directory skipped: %s\n"), ff_pkt->fname);
+      Jmsg(jcr, M_SKIPPED, 1, _("     Recursion turned off. Directory skipped: %s\n"), ff_pkt->fname);
       return 1;
    case FT_NOFSCHG:
-      Jmsg(jcr, M_SKIPPED, -1, _("     File system change prohibited. Directory skipped: %s\n"), ff_pkt->fname);
+      Jmsg(jcr, M_SKIPPED, 1, _("     File system change prohibited. Directory skipped: %s\n"), ff_pkt->fname);
       return 1;
    case FT_NOOPEN: {
       berrno be;
       be.set_errno(ff_pkt->ff_errno);
-      Jmsg(jcr, M_NOTSAVED, -1, _("     Could not open directory %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
+      Jmsg(jcr, M_NOTSAVED, 1, _("     Could not open directory %s: ERR=%s\n"), ff_pkt->fname, be.strerror());
       jcr->Errors++;
       return 1;
    }
@@ -164,7 +164,7 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt)
         ff_pkt->ff_errno = errno;
         berrno be;
         be.set_errno(bfd.berrno);
-         Jmsg(jcr, M_NOTSAVED, -1, _("     Cannot open %s: ERR=%s.\n"),
+         Jmsg(jcr, M_NOTSAVED, 1, _("     Cannot open %s: ERR=%s.\n"),
              ff_pkt->fname, be.strerror());
         jcr->Errors++;
         return 1;
@@ -226,7 +226,7 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt)
       if (n < 0) {
         berrno be;
         be.set_errno(bfd.berrno);
-         Jmsg(jcr, M_ERROR, -1, _("Error reading file %s: ERR=%s\n"), 
+         Jmsg(jcr, M_ERROR, 1, _("Error reading file %s: ERR=%s\n"), 
              ff_pkt->fname, be.strerror());
         jcr->Errors++;
       }
@@ -248,7 +248,7 @@ static int verify_file(FF_PKT *ff_pkt, void *pkt)
       if (n < 0) {
         berrno be;
         be.set_errno(bfd.berrno);
-         Jmsg(jcr, M_ERROR, -1, _("Error reading file %s: ERR=%s\n"), 
+         Jmsg(jcr, M_ERROR, 1, _("Error reading file %s: ERR=%s\n"), 
              ff_pkt->fname, be.strerror());
         jcr->Errors++;
       }
index bd9746c64f1585301e6ad822af35ba978e42c056..4091331aa478317cf6348578a28764267583149d 100644 (file)
@@ -208,5 +208,5 @@ void print_ls_output(JCR *jcr, ATTR *attr)
    *p++ = '\n';
    *p = 0;
    Dmsg1(20, "%s", buf);
-   Jmsg(jcr, M_RESTORED, 0, "%s", buf);
+   Jmsg(jcr, M_RESTORED, 1, "%s", buf);
 }
index aa798b77975d35c593c31cc8b9bbd257da312e5e..7eb3f1fc9b59b460fcf70a29f24723888c9cad15 100644 (file)
@@ -53,6 +53,19 @@ char *bstrftime(char *dt, int maxlen, utime_t tim)
    return dt;
 }
 
+/* Formatted time for user display: dd-Mon hh:mm */
+char *bstrftime_ny(char *dt, int maxlen, utime_t tim)
+{
+   time_t ttime = (time_t)tim;
+   struct tm tm;
+   
+   /* ***FIXME**** the format and localtime_r() should be user configurable */
+   localtime_r(&ttime, &tm);
+   strftime(dt, maxlen, "%d-%b %H:%M", &tm);
+   return dt;
+}
+
+
 /* Formatted time for user display: dd-Mon-yy hh:mm  (no century) */
 char *bstrftime_nc(char *dt, int maxlen, utime_t tim)
 {
index d32891c672116da01d93cfec760093c2d7daadbb..8d216124700db1ff2158e1e60f3ef5cd90cc9734 100644 (file)
@@ -41,6 +41,7 @@ int tm_woy(time_t stime);
 
 char *bstrutime(char *dt, int maxlen, utime_t tim);
 char *bstrftime(char *dt, int maxlen, utime_t tim);
+char *bstrftime_ny(char *dt, int maxlen, utime_t tim);
 char *bstrftime_nc(char *dt, int maxlen, utime_t tim);
 utime_t str_to_utime(char *str);
 
index e656eae57a38b3deebed3b798992d73683b28e0a..ebbfd79275ca27c067bf9f48356b9b7c0b46e42e 100755 (executable)
@@ -191,6 +191,7 @@ JCR *new_jcr(int size, JCR_free_HANDLER *daemon_free_jcr)
    Dmsg0(400, "Enter new_jcr\n");
    jcr = (JCR *)malloc(size);
    memset(jcr, 0, size);
+   jcr->my_thread_id = pthread_self();
    jcr->msg_queue = New(dlist(item, &item->link));
    jcr->job_end_push.init(1, false);
    jcr->sched_time = time(NULL);
index e1413790a86f5683f42066594eda30e53f5847a1..03f7afaf622a9685ae90916b6898734840895794 100755 (executable)
@@ -257,8 +257,9 @@ void init_console_msg(const char *wd)
    bsnprintf(con_fname, sizeof(con_fname), "%s/%s.conmsg", wd, my_name);
    fd = open(con_fname, O_CREAT|O_RDWR|O_BINARY, 0600);
    if (fd == -1) {
+      berrno be;
       Emsg2(M_ERROR_TERM, 0, _("Could not open console message file %s: ERR=%s\n"),
-         con_fname, strerror(errno));
+         con_fname, be.strerror());
    }
    if (lseek(fd, 0, SEEK_END) > 0) {
       console_msg_pending = 1;
@@ -266,12 +267,14 @@ void init_console_msg(const char *wd)
    close(fd);
    con_fd = fopen(con_fname, "a+");
    if (!con_fd) {
+      berrno be;
       Emsg2(M_ERROR, 0, _("Could not open console message file %s: ERR=%s\n"),
-         con_fname, strerror(errno));
+         con_fname, be.strerror());
    }
    if (rwl_init(&con_lock) != 0) {
+      berrno be;
       Emsg1(M_ERROR_TERM, 0, _("Could not get con mutex: ERR=%s\n"), 
-        strerror(errno));
+        be.strerror());
    }
 }
 
@@ -444,7 +447,8 @@ void close_msg(JCR *jcr)
               fputs(line, bpipe->wfd);
            }
            if (!close_wpipe(bpipe)) {       /* close write pipe sending mail */
-               Pmsg1(000, "close error: ERR=%s\n", strerror(errno));
+              berrno be;
+               Pmsg1(000, "close error: ERR=%s\n", be.strerror());
            }
 
            /*
@@ -557,19 +561,39 @@ void term_msg()
 /*
  * Handle sending the message to the appropriate place
  */
-void dispatch_message(JCR *jcr, int type, int level, char *msg)
+void dispatch_message(JCR *jcr, int type, time_t mtime, char *msg)
 {
     DEST *d;   
     char dt[MAX_TIME_LENGTH];
     POOLMEM *mcmd;
-    int len;
+    int len, dtlen;
     MSGS *msgs;
     BPIPE *bpipe;
 
     Dmsg2(800, "Enter dispatch_msg type=%d msg=%s\n", type, msg);
 
+    /*
+     * Most messages are prefixed by a date and time. If mtime is
+     * zero, then we use the current time.  If mtime is 1 (special
+     * kludge), we do not prefix the date and time. Otherwise,
+     * we assume mtime is a time_t and use it.
+     */
+    if (mtime == 0) {
+       mtime = time(NULL);
+    } 
+    if (mtime == 1) {
+       *dt = 0;
+       dtlen = 0;
+    } else {
+       bstrftime_ny(dt, sizeof(dt), mtime);
+       dtlen = strlen(dt);
+       dt[dtlen++] = ' ';
+       dt[dtlen] = 0;
+    }
+
     if (type == M_ABORT || type == M_ERROR_TERM) {
 #ifndef HAVE_WIN32
+       fputs(dt, stdout);
        fputs(msg, stdout);        /* print this here to INSURE that it is printed */
        fflush(stdout);
 #endif
@@ -603,10 +627,9 @@ void dispatch_message(JCR *jcr, int type, int level, char *msg)
                if (con_fd) {
                   Pw(con_lock);      /* get write lock on console message file */
                   errno = 0;
-                  bstrftime(dt, sizeof(dt), time(NULL));
-                  len = strlen(dt);
-                   dt[len++] = ' ';
-                  fwrite(dt, len, 1, con_fd);
+                  if (dtlen) {
+                     fwrite(dt, dtlen, 1, con_fd);
+                  }
                   len = strlen(msg);
                   if (len > 0) {
                      fwrite(msg, len, 1, con_fd);
@@ -629,10 +652,11 @@ void dispatch_message(JCR *jcr, int type, int level, char *msg)
                 syslog(LOG_DAEMON|LOG_ERR, "%s", msg);
                break;
             case MD_OPERATOR:
-                Dmsg1(800, "OPERATOR for collowing msg: %s\n", msg);
+                Dmsg1(800, "OPERATOR for following msg: %s\n", msg);
                mcmd = get_pool_memory(PM_MESSAGE);
                if ((bpipe=open_mail_pipe(jcr, mcmd, d))) {
                   int stat;
+                  fputs(dt, bpipe->wfd);
                   fputs(msg, bpipe->wfd);
                   /* Messages to the operator go one at a time */
                   stat = close_bpipe(bpipe);
@@ -654,15 +678,18 @@ void dispatch_message(JCR *jcr, int type, int level, char *msg)
                   make_unique_mail_filename(jcr, name, d);
                    d->fd = fopen(name, "w+");
                   if (!d->fd) {
+                     berrno be;
                      d->fd = stdout;
-                      Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", name, strerror(errno));
+                      Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", name, 
+                           be.strerror());
                      d->fd = NULL;
                      free_pool_memory(name);
                      break;
                   }
                   d->mail_filename = name;
                }
-               len = strlen(msg);
+               fputs(dt, d->fd);
+               len = strlen(msg) + dtlen;;
                if (len > d->max_len) {
                   d->max_len = len;      /* keep max line length */
                }
@@ -673,12 +700,15 @@ void dispatch_message(JCR *jcr, int type, int level, char *msg)
                if (!d->fd) {
                    d->fd = fopen(d->where, "w+");
                   if (!d->fd) {
+                     berrno be;
                      d->fd = stdout;
-                      Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
+                      Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, 
+                           be.strerror());
                      d->fd = NULL;
                      break;
                   }
                }
+               fputs(dt, d->fd);
                fputs(msg, d->fd);
                break;
             case MD_APPEND:
@@ -686,29 +716,34 @@ void dispatch_message(JCR *jcr, int type, int level, char *msg)
                if (!d->fd) {
                    d->fd = fopen(d->where, "a");
                   if (!d->fd) {
+                     berrno be;
                      d->fd = stdout;
-                      Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, strerror(errno));
+                      Qmsg2(jcr, M_ERROR, 0, "fopen %s failed: ERR=%s\n", d->where, 
+                           be.strerror());
                      d->fd = NULL;
                      break;
                   }
                }
+               fputs(dt, d->fd);
                fputs(msg, d->fd);
                break;
             case MD_DIRECTOR:
                 Dmsg1(800, "DIRECTOR for following msg: %s", msg);
                if (jcr && jcr->dir_bsock && !jcr->dir_bsock->errors) {
                    bnet_fsend(jcr->dir_bsock, "Jmsg Job=%s type=%d level=%d %s", 
-                     jcr->Job, type, level, msg);
+                     jcr->Job, type, mtime, msg);
                }
                break;
             case MD_STDOUT:
                 Dmsg1(800, "STDOUT for following msg: %s", msg);
                if (type != M_ABORT && type != M_ERROR_TERM) { /* already printed */
+                  fputs(dt, stdout);
                   fputs(msg, stdout);
                }
                break;
             case MD_STDERR:
                 Dmsg1(800, "STDERR for following msg: %s", msg);
+               fputs(dt, stderr);
                fputs(msg, stderr);
                break;
             default:
@@ -941,7 +976,7 @@ e_msg(const char *file, int line, int type, int level, const char *fmt,...)
     bvsnprintf(buf+len, sizeof(buf)-len, (char *)fmt, arg_ptr);
     va_end(arg_ptr);
 
-    dispatch_message(NULL, type, level, buf);
+    dispatch_message(NULL, type, 0, buf);
 
     if (type == M_ABORT) {
        char *p = 0;
@@ -958,7 +993,7 @@ e_msg(const char *file, int line, int type, int level, const char *fmt,...)
  *
  */
 void 
-Jmsg(JCR *jcr, int type, int level, const char *fmt,...)
+Jmsg(JCR *jcr, int type, time_t mtime, const char *fmt,...)
 {
     char     rbuf[5000];
     va_list   arg_ptr;
@@ -1038,7 +1073,7 @@ Jmsg(JCR *jcr, int type, int level, const char *fmt,...)
     bvsnprintf(rbuf+len,  sizeof(rbuf)-len, fmt, arg_ptr);
     va_end(arg_ptr);
 
-    dispatch_message(jcr, type, level, rbuf);
+    dispatch_message(jcr, type, mtime, rbuf);
 
     if (type == M_ABORT){
        char *p = 0;
@@ -1053,7 +1088,7 @@ Jmsg(JCR *jcr, int type, int level, const char *fmt,...)
  * If we come here, prefix the message with the file:line-number,
  *  then pass it on to the normal Jmsg routine.
  */
-void j_msg(const char *file, int line, JCR *jcr, int type, int level, const char *fmt,...)
+void j_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...)
 {
    va_list   arg_ptr;
    int i, len, maxlen;
@@ -1074,7 +1109,7 @@ void j_msg(const char *file, int line, JCR *jcr, int type, int level, const char
       break;
    }
 
-   Jmsg(jcr, type, level, "%s", pool_buf);
+   Jmsg(jcr, type, mtime, "%s", pool_buf);
    free_memory(pool_buf);
 }
 
@@ -1196,7 +1231,7 @@ static pthread_mutex_t msg_queue_mutex = PTHREAD_MUTEX_INITIALIZER;
  *  sending a message, it is a bit messy to recursively call
  *  yourself when the bnet packet is not reentrant).
  */
-void Qmsg(JCR *jcr, int type, int level, const char *fmt,...)
+void Qmsg(JCR *jcr, int type, time_t mtime, const char *fmt,...)
 {
    va_list   arg_ptr;
    int len, maxlen;
@@ -1218,13 +1253,13 @@ void Qmsg(JCR *jcr, int type, int level, const char *fmt,...)
    }
    item = (MQUEUE_ITEM *)malloc(sizeof(MQUEUE_ITEM) + strlen(pool_buf) + 1);
    item->type = type;
-   item->level = level;
+   item->mtime = time(NULL);
    strcpy(item->msg, pool_buf);  
    P(msg_queue_mutex);
    /* If no jcr or dequeuing send to daemon to avoid recursion */
    if (!jcr || jcr->dequeuing) {
       /* jcr==NULL => daemon message, safe to send now */
-      Jmsg(NULL, item->type, item->level, "%s", item->msg);
+      Jmsg(NULL, item->type, item->mtime, "%s", item->msg);
       free(item);
    } else {
       /* Queue message for later sending */
@@ -1245,7 +1280,7 @@ void dequeue_messages(JCR *jcr)
    jcr->dequeuing = true;
    foreach_dlist(item, jcr->msg_queue) {
 //    Dmsg1(000, "dequeue item=%lu\n", (long unsigned)item);
-      Jmsg(jcr, item->type, item->level, "%s", item->msg);
+      Jmsg(jcr, item->type, item->mtime, "%s", item->msg);
    }
    jcr->msg_queue->destroy();
    jcr->dequeuing = false;
@@ -1257,7 +1292,7 @@ void dequeue_messages(JCR *jcr)
  * If we come here, prefix the message with the file:line-number,
  *  then pass it on to the normal Qmsg routine.
  */
-void q_msg(const char *file, int line, JCR *jcr, int type, int level, const char *fmt,...)
+void q_msg(const char *file, int line, JCR *jcr, int type, time_t mtime, const char *fmt,...)
 {
    va_list   arg_ptr;
    int i, len, maxlen;
@@ -1278,7 +1313,7 @@ void q_msg(const char *file, int line, JCR *jcr, int type, int level, const char
       break;
    }
 
-   Qmsg(jcr, type, level, "%s", pool_buf);
+   Qmsg(jcr, type, mtime, "%s", pool_buf);
    free_memory(pool_buf);
 }
 
index 5c70ec0266253228f3ee2f0c7b9bd43a9f9baf91..969aafd94ac25b296cc9f9492d0cd532ba3748f3 100644 (file)
@@ -120,14 +120,14 @@ typedef struct s_dest {
 struct MQUEUE_ITEM {
    dlink link;
    int type;
-   int level;
+   time_t mtime;
    char msg[1];
 };
 
 
 void d_msg(const char *file, int line, int level, const char *fmt,...);
 void e_msg(const char *file, int line, int type, int level, const char *fmt,...);
-void Jmsg(JCR *jcr, int type, int level, const char *fmt,...);
+void Jmsg(JCR *jcr, int type, time_t mtime, const char *fmt,...);
 
 extern int debug_level;
 extern int verbose;
index 007c9f22e3e6242a2662dcc034499b6a04fc7fda..bb055f22230ca46bcec00382e0ecb01d16de768c 100644 (file)
@@ -150,8 +150,8 @@ void       term_msg              (void);
 void       close_msg             (JCR *jcr);
 void       add_msg_dest          (MSGS *msg, int dest, int type, char *where, char *dest_code);
 void       rem_msg_dest          (MSGS *msg, int dest, int type, char *where);
-void       Jmsg                  (JCR *jcr, int type, int level, const char *fmt, ...);
-void       dispatch_message      (JCR *jcr, int type, int level, char *buf);
+void       Jmsg                  (JCR *jcr, int type, time_t mtime, const char *fmt, ...);
+void       dispatch_message      (JCR *jcr, int type, time_t mtime, char *buf);
 void       init_console_msg      (const char *wd);
 void       free_msgs_res         (MSGS *msgs);
 void       dequeue_messages      (JCR *jcr);
index 72635fce8217adcb866a9b1a9814b8a134850b99..d6d8a4a25e7a8c1a6eb94021d6f7f9a9c395f394 100644 (file)
@@ -1,8 +1,8 @@
 /* */
 #undef  VERSION
 #define VERSION "1.37.1"
-#define BDATE   "12 November 2004"
-#define LSMDATE "12Nov04"
+#define BDATE   "16 November 2004"
+#define LSMDATE "16Nov04"
 
 /* Debug flags */
 #undef  DEBUG