pkgsrc-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

pkg/37652: two fixes for gtkpod



>Number:         37652
>Category:       pkg
>Synopsis:       mutex unlocking on unlocked mutex / undefined parameter of 
>sysconf call
>Confidential:   no
>Severity:       serious
>Priority:       medium
>Responsible:    pkg-manager
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Dec 31 16:10:03 +0000 2007
>Originator:     Karl Uwe Lockhoff
>Release:        NetBSD 4.0
>Environment:
System: NetBSD radagast 4.0 NetBSD 4.0 (GENERIC_LAPTOP) #0: Sun Dec 16 00:27:57 
PST 2007 
builds@wb34:/home/builds/ab/netbsd-4-0-RELEASE/i386/200712160005Z-obj/home/builds/ab/netbsd-4-0-RELEASE/src/sys/arch/i386/compile/GENERIC_LAPTOP
 i386
Architecture: i386
Machine: i386
>Description:
1. The lock count of conv->mutex in file_convert.c may get zero, which results 
in coredump. I'am not sure if you need the mpeg4ip option to enabaled, so this
called.

2. The sysconf call with _SC_NPROCESSORS_ONLN will not compile on many
systems. Actual the original code is as bad as the fix.

I've included a patch. 

>How-To-Repeat:
1. Try to synchronize an Ipod
2. Try to compile
>Fix:
--- src/file_convert.c.orig     2007-12-18 04:37:43.000000000 +0000
+++ src/file_convert.c  2007-12-31 14:29:36.000000000 +0000
@@ -216,7 +216,7 @@
     gchar *fname_root;      /* filename root of converted file          */
     gchar *fname_extension; /* filename extension of converted file     */
     GPid  pid;              /* PID of child doing the conversion        */
-    gint  stderr;           /* stderr of child doing the conversion     */
+    gint  Cstderr;          /* stderr of child doing the conversion     */
     Track *track;           /* for reference, don't access inside threads! */
     iTunesDB *itdb;         /* for reference, don't access inside threads! */
     gint  threadnum;        /* number of thread working on this track   */
@@ -647,7 +647,11 @@
     conv->max_threads_num = prefs_get_int (FILE_CONVERT_MAX_THREADS_NUM);
     if (conv->max_threads_num == 0)
     {   /* set to maximum available number of processors */
+#if defined(__DragonFly__) || defined(__NetBSD__)
+       conv->max_threads_num = 1;
+#else
        conv->max_threads_num = sysconf (_SC_NPROCESSORS_ONLN);
+#endif
        /* paranoia mode on */
        if (conv->max_threads_num <= 0)
        {
@@ -2308,7 +2312,7 @@
                                  &ctr->pid,    /* child's PID    */
                                  NULL,         /* child's stdin  */
                                  NULL,         /* child's stdout */
-                                 &ctr->stderr, /* child's stderr */
+                                 &ctr->Cstderr,/* child's stderr */
                                  &error);
 
            child_pid = ctr->pid;
@@ -2334,7 +2338,7 @@
                gint status;
 
                /* set up i/o channel to main thread */
-               ctr->gio_channel = g_io_channel_unix_new (ctr->stderr);
+               ctr->gio_channel = g_io_channel_unix_new (ctr->Cstderr);
                g_io_channel_set_flags (ctr->gio_channel,
                                        G_IO_FLAG_NONBLOCK, NULL);
                g_io_channel_set_close_on_unref (ctr->gio_channel, TRUE);
@@ -3027,7 +3031,7 @@
        return result;
     }
 
-    g_mutex_unlock (conv->mutex);
+    /* g_mutex_unlock (conv->mutex); */
 
     copy_success = itdb_cp (source_file, dest_file, &error);




Home | Main Index | Thread Index | Old Index