2003-02-22  Pierre Humblet  <[EMAIL PROTECTED]>

        * syslog.cc (syslog): Do not print the Windows pid. Print the Cygwin
        pid as an unsigned decimal. On Win95 print a timestamp and attempt
        to lock the file up to four times in 3 ms. 
Index: syslog.cc
===================================================================
RCS file: /cvs/src/src/winsup/cygwin/syslog.cc,v
retrieving revision 1.21
diff -u -p -r1.21 syslog.cc
--- syslog.cc   22 Sep 2002 03:38:57 -0000      1.21
+++ syslog.cc   22 Feb 2003 04:11:55 -0000
@@ -302,8 +302,7 @@ syslog (int priority, const char *messag
          }
        if (process_logopt & LOG_PID)
          {
-           if (pass.print ("Win32 Process Id = 0x%X : Cygwin Process Id = 0x%X : ",
-                       GetCurrentProcessId (),  getpid ()) == -1)
+           if (pass.print ("Cygwin PID = %u : ", getpid ()) == -1)
              return;
          }

@@ -375,6 +374,8 @@ syslog (int priority, const char *messag
     else
       {
        /* Under Windows 95, append the message to the log file */
+       char timestamp[24];
+       time_t ctime;
        FILE *fp = fopen (get_win95_event_log_path (), "a");
        if (fp == NULL)
          {
@@ -382,24 +383,32 @@ syslog (int priority, const char *messag
                          get_win95_event_log_path ());
            return;
          }
+       strftime (timestamp, sizeof timestamp, "%Y-%m-%d %H:%M:%S : ",
+                 localtime (&(ctime = time (NULL))));
+
        /* Now to prevent several syslog messages from being
           interleaved, we must lock the first byte of the file
           This works on Win32 even if we created the file above.
        */
        HANDLE fHandle = cygheap->fdtab[fileno (fp)]->get_handle ();
-       if (LockFile (fHandle, 0, 0, 1, 0) == FALSE)
-         {
-           debug_printf ("failed to lock file %s", get_win95_event_log_path ());
-           fclose (fp);
-           return;
-         }
+       for (int i = 0;; i++)
+         if (LockFile (fHandle, 0, 0, 1, 0) == FALSE)
+           if (i == 3)
+             {
+               debug_printf ("failed to lock file %s", get_win95_event_log_path ());
+               fclose (fp);
+               return;
+             }
+           else
+             usleep (1000);
+         else
+           break;
+       fputs (timestamp, fp);
        fputs (msg_strings[0], fp);
        fputc ('\n', fp);
        UnlockFile (fHandle, 0, 0, 1, 0);
        if (ferror (fp))
-         {
-           debug_printf ("error in writing syslog");
-         }
+         debug_printf ("error in writing syslog");
        fclose (fp);
       }
 }

Reply via email to