mpd@amd64

James R. Van Artsalen james at jrv.org
Sat Dec 25 00:19:35 PST 2004


Archie Cobbs wrote:

> James R. Van Artsalen wrote:
>
>> I looked at this and it crashes starting up for me too.  It crashes 
>> in vprintf, within the second call to LogPrintf (), apparently while 
>> logging ordinary startup messages.  I don't see any obvious cause at 
>> that point unfortunately.
>
>
> Can you try the attached patch? Someone else on the mpd-users mailing
> list had a similar problem and this helped.


Thanks, it works now.

Attached is a slightly different patch.  This is against the source 
currently in ports, and it fixes two additional questionable uses of 
va_start ().
-------------- next part --------------
--- custom.c.~1~	Tue May  4 11:12:28 2004
+++ custom.c	Fri Dec 24 17:03:03 2004
@@ -141,16 +141,19 @@
   if (!bund)
     return;
 
-  va_start(args, fmt);
   if (l == NULL) {
     for (k = 0; k < bund->n_links; k++) {
-      if (bund && bund->links[k])
+      if (bund && bund->links[k]) {
+	va_start(args, fmt);
 	RecordLinkUpDownReason2(bund->links[k], up, key, fmt, args);
+	va_end(args);
+      }
     }
   } else {
+    va_start(args, fmt);
     RecordLinkUpDownReason2(l, up, key, fmt, args);
+    va_end(args);
   }
-  va_end(args);
 }
 
 static void
--- log.c.~1~	Tue May  4 11:12:28 2004
+++ log.c	Fri Dec 24 16:42:52 2004
@@ -265,17 +265,21 @@
 {
   va_list	args;
 
-  va_start(args, fmt);
   LogTimeStamp(logprintf);
+  va_start(args, fmt);
   vlogprintf(fmt, args);
+  va_end(args);
+  va_start(args, fmt);
   vlogprintf("\n", args);		/* XXX args will be ignored */
+  va_end(args);
   if (gLogOptions & LG_CONSOLE)
   {
+    va_start(args, fmt);
     vfprintf(stdout, fmt, args);
+    va_end(args);
     putc('\n', stdout);
     fflush(stdout);
   }
-  va_end(args);
 }
 
 /*
@@ -315,12 +319,16 @@
 
 /* Dump it */
 
-  va_start(ap, fmt);
-  if (console)
+  if (console) {
+    va_start(ap, fmt);
     LogDoDumpBp(printf, vprintf, FALSE, bp, fmt, ap);
-  if (log)
+    va_end(ap);
+  }
+  if (log) {
+    va_start(ap, fmt);
     LogDoDumpBp(logprintf, vlogprintf, TRUE, bp, fmt, ap);
-  va_end(ap);
+    va_end(ap);
+  }
 }
 
 /*
@@ -342,11 +350,16 @@
 
 /* Dump it */
 
-  va_start(ap, fmt);
-  if (console)
+  if (console) {
+    va_start(ap, fmt);
     LogDoDumpBuf(printf, vprintf, FALSE, buf, count, fmt, ap);
-  if (log)
+    va_end(ap);
+  }
+  if (log) {
+    va_start(ap, fmt);
     LogDoDumpBuf(logprintf, vlogprintf, TRUE, buf, count, fmt, ap);
+    va_end(ap);
+  }
 }
 
 /*
--- modem.c.~1~	Tue May  4 11:12:28 2004
+++ modem.c	Fri Dec 24 17:08:54 2004
@@ -610,10 +610,12 @@
   /* Concat prefix and message */
   va_start(args, fmt);
   vsnprintf(buf, sizeof(buf), fmt, args);
+  va_end(args);
   if (*buf != ' ')
     snprintf(buf, sizeof(buf), "[%s] chat: ", lnk->name);
   else
     *buf = '\0';
+  va_start(args, fmt);
   vsnprintf(buf + strlen(buf), sizeof(buf) - strlen(buf), fmt, args);
   va_end(args);
 


More information about the freebsd-amd64 mailing list