syslog

Pierre A. Humblet Pierre.Humblet@ieee.org
Sat Feb 22 04:34:00 GMT 2003


2003-02-22  Pierre Humblet  <pierre.humblet@ieee.org>

	* 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. 
-------------- next part --------------
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);
       }
 }


More information about the Cygwin-patches mailing list