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

Re: imagemagick: convert hangs on hurd-i386



reassign 407208 hurd
thanks

Hi,

Samuel Thibault, le Tue 16 Jan 2007 22:16:01 +0100, a écrit :
> convert currently hangs on hurd-i386, which makes apache FTBFS.  We have
> yet to investigate, this bug report is mostly for letting people know
> the issue and remember to fix it.

Ok, the problem is that convert is linked both with libpthread and
libX11, and when looking for the pthread_mutex_unlock() symbol, the one
from libX11 (void stub) is found instead of the one from libpthread. The
result is that the inlined version of pthread_mutex_lock() locks the
mutex, but pthread_mutex_unlock() doesn't unlock it (since that's X11's
one which is called), and this results to a hang as soon as you try to
lock a mutex twice. The unfortunate effect is that a bunch of package
then FTBFS just because they use convert during their build.

It looks to me a bit odd that libpthread defines only weak aliases for
pthread_mutex_lock, since that makes 

        fprintf(stderr,"%p %p\n",pthread_mutex_lock,pthread_mutex_unlock);

print 0x106d910 0x106d910 when linked with -lX11 -lpthread (bogus), and
print 0x102d2f0 0x102db10 when linked with -lpthread -lX11.

Is there a reason for using weak aliases here?  Linux' libpthread.so
uses strong aliases here.  Here is a patch for doing the same here.

Samuel
Index: libpthread/sysdeps/generic/pt-mutex-destroy.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/pt-mutex-destroy.c,v
retrieving revision 1.1
diff -u -p -r1.1 pt-mutex-destroy.c
--- libpthread/sysdeps/generic/pt-mutex-destroy.c	10 Oct 2002 23:05:06 -0000	1.1
+++ libpthread/sysdeps/generic/pt-mutex-destroy.c	20 Jan 2007 01:59:26 -0000
@@ -32,4 +32,4 @@ _pthread_mutex_destroy (pthread_mutex_t 
   return 0;
 }
 
-weak_alias (_pthread_mutex_destroy, pthread_mutex_destroy);
+strong_alias (_pthread_mutex_destroy, pthread_mutex_destroy);
Index: libpthread/sysdeps/generic/pt-mutex-init.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/pt-mutex-init.c,v
retrieving revision 1.2
diff -u -p -r1.2 pt-mutex-init.c
--- libpthread/sysdeps/generic/pt-mutex-init.c	12 May 2005 20:55:38 -0000	1.2
+++ libpthread/sysdeps/generic/pt-mutex-init.c	20 Jan 2007 01:59:26 -0000
@@ -45,4 +45,4 @@ _pthread_mutex_init (pthread_mutex_t *mu
   return 0;
 }
 
-weak_alias (_pthread_mutex_init, pthread_mutex_init);
+strong_alias (_pthread_mutex_init, pthread_mutex_init);
Index: libpthread/sysdeps/generic/pt-mutex-lock.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/pt-mutex-lock.c,v
retrieving revision 1.1
diff -u -p -r1.1 pt-mutex-lock.c
--- libpthread/sysdeps/generic/pt-mutex-lock.c	10 Oct 2002 23:05:06 -0000	1.1
+++ libpthread/sysdeps/generic/pt-mutex-lock.c	20 Jan 2007 01:59:26 -0000
@@ -33,5 +33,5 @@ __pthread_mutex_lock (struct __pthread_m
   return __pthread_mutex_timedlock_internal (mutex, 0);
 }
 
-weak_alias (__pthread_mutex_lock, _pthread_mutex_lock);
-weak_alias (__pthread_mutex_lock, pthread_mutex_lock);
+strong_alias (__pthread_mutex_lock, _pthread_mutex_lock);
+strong_alias (__pthread_mutex_lock, pthread_mutex_lock);
Index: libpthread/sysdeps/generic/pt-mutex-trylock.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/pt-mutex-trylock.c,v
retrieving revision 1.3
diff -u -p -r1.3 pt-mutex-trylock.c
--- libpthread/sysdeps/generic/pt-mutex-trylock.c	12 May 2005 20:55:38 -0000	1.3
+++ libpthread/sysdeps/generic/pt-mutex-trylock.c	20 Jan 2007 01:59:26 -0000
@@ -88,5 +88,5 @@ __pthread_mutex_trylock (struct __pthrea
   return err;
 }
 
-weak_alias (__pthread_mutex_trylock, _pthread_mutex_trylock);
-weak_alias (__pthread_mutex_trylock, pthread_mutex_trylock);
+strong_alias (__pthread_mutex_trylock, _pthread_mutex_trylock);
+strong_alias (__pthread_mutex_trylock, pthread_mutex_trylock);
Index: libpthread/sysdeps/generic/pt-mutex-unlock.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/pt-mutex-unlock.c,v
retrieving revision 1.1
diff -u -p -r1.1 pt-mutex-unlock.c
--- libpthread/sysdeps/generic/pt-mutex-unlock.c	10 Oct 2002 23:05:06 -0000	1.1
+++ libpthread/sysdeps/generic/pt-mutex-unlock.c	20 Jan 2007 01:59:26 -0000
@@ -78,5 +78,5 @@ __pthread_mutex_unlock (pthread_mutex_t 
   return 0;
 }
 
-weak_alias (__pthread_mutex_unlock, _pthread_mutex_unlock);
-weak_alias (__pthread_mutex_unlock, pthread_mutex_unlock);
+strong_alias (__pthread_mutex_unlock, _pthread_mutex_unlock);
+strong_alias (__pthread_mutex_unlock, pthread_mutex_unlock);
Index: libpthread/sysdeps/generic/pt-rwlock-destroy.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/pt-rwlock-destroy.c,v
retrieving revision 1.1
diff -u -p -r1.1 pt-rwlock-destroy.c
--- libpthread/sysdeps/generic/pt-rwlock-destroy.c	10 Oct 2002 23:05:06 -0000	1.1
+++ libpthread/sysdeps/generic/pt-rwlock-destroy.c	20 Jan 2007 01:59:26 -0000
@@ -26,4 +26,4 @@ _pthread_rwlock_destroy (pthread_rwlock_
   return 0;
 }
 
-weak_alias (_pthread_rwlock_destroy, pthread_rwlock_destroy);
+strong_alias (_pthread_rwlock_destroy, pthread_rwlock_destroy);
Index: libpthread/sysdeps/generic/pt-rwlock-init.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/pt-rwlock-init.c,v
retrieving revision 1.2
diff -u -p -r1.2 pt-rwlock-init.c
--- libpthread/sysdeps/generic/pt-rwlock-init.c	12 May 2005 20:55:38 -0000	1.2
+++ libpthread/sysdeps/generic/pt-rwlock-init.c	20 Jan 2007 01:59:26 -0000
@@ -42,4 +42,4 @@ _pthread_rwlock_init (pthread_rwlock_t *
   return 0;
 }
 
-weak_alias (_pthread_rwlock_init, pthread_rwlock_init);
+strong_alias (_pthread_rwlock_init, pthread_rwlock_init);
Index: libpthread/sysdeps/generic/sem-close.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-close.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-close.c
--- libpthread/sysdeps/generic/sem-close.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-close.c	20 Jan 2007 01:59:26 -0000
@@ -29,4 +29,4 @@ __sem_close (sem_t *sem)
   return -1;
 }
 
-weak_alias (__sem_close, sem_close);
+strong_alias (__sem_close, sem_close);
Index: libpthread/sysdeps/generic/sem-destroy.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-destroy.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-destroy.c
--- libpthread/sysdeps/generic/sem-destroy.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-destroy.c	20 Jan 2007 01:59:26 -0000
@@ -35,4 +35,4 @@ __sem_destroy (sem_t *sem)
   return 0;
 }
 
-weak_alias (__sem_destroy, sem_destroy);
+strong_alias (__sem_destroy, sem_destroy);
Index: libpthread/sysdeps/generic/sem-getvalue.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-getvalue.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-getvalue.c
--- libpthread/sysdeps/generic/sem-getvalue.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-getvalue.c	20 Jan 2007 01:59:26 -0000
@@ -30,4 +30,4 @@ __sem_getvalue (sem_t *restrict sem, int
   return 0;
 }
 
-weak_alias (__sem_getvalue, sem_getvalue);
+strong_alias (__sem_getvalue, sem_getvalue);
Index: libpthread/sysdeps/generic/sem-init.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-init.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-init.c
--- libpthread/sysdeps/generic/sem-init.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-init.c	20 Jan 2007 01:59:26 -0000
@@ -43,4 +43,4 @@ __sem_init (sem_t *sem, int pshared, uns
   return 0;
 }
 
-weak_alias (__sem_init, sem_init);
+strong_alias (__sem_init, sem_init);
Index: libpthread/sysdeps/generic/sem-open.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-open.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-open.c
--- libpthread/sysdeps/generic/sem-open.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-open.c	20 Jan 2007 01:59:26 -0000
@@ -29,4 +29,4 @@ __sem_open (const char *name, int open_f
   return SEM_FAILED;
 }
 
-weak_alias (__sem_open, sem_open);
+strong_alias (__sem_open, sem_open);
Index: libpthread/sysdeps/generic/sem-post.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-post.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-post.c
--- libpthread/sysdeps/generic/sem-post.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-post.c	20 Jan 2007 01:59:26 -0000
@@ -59,4 +59,4 @@ __sem_post (sem_t *sem)
   return 0;
 }
 
-weak_alias (__sem_post, sem_post);
+strong_alias (__sem_post, sem_post);
Index: libpthread/sysdeps/generic/sem-timedwait.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-timedwait.c,v
retrieving revision 1.2
diff -u -p -r1.2 sem-timedwait.c
--- libpthread/sysdeps/generic/sem-timedwait.c	12 May 2005 20:55:38 -0000	1.2
+++ libpthread/sysdeps/generic/sem-timedwait.c	20 Jan 2007 01:59:26 -0000
@@ -89,4 +89,4 @@ __sem_timedwait (sem_t *restrict sem,
   return __sem_timedwait_internal (sem, timeout);
 }
 
-weak_alias (__sem_timedwait, sem_timedwait);
+strong_alias (__sem_timedwait, sem_timedwait);
Index: libpthread/sysdeps/generic/sem-trywait.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-trywait.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-trywait.c
--- libpthread/sysdeps/generic/sem-trywait.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-trywait.c	20 Jan 2007 01:59:26 -0000
@@ -39,4 +39,4 @@ __sem_trywait (sem_t *sem)
   return -1;
 }
 
-weak_alias (__sem_trywait, sem_trywait);
+strong_alias (__sem_trywait, sem_trywait);
Index: libpthread/sysdeps/generic/sem-unlink.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-unlink.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-unlink.c
--- libpthread/sysdeps/generic/sem-unlink.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-unlink.c	20 Jan 2007 01:59:26 -0000
@@ -29,4 +29,4 @@ __sem_unlink (const char *name)
   return -1;
 }
 
-weak_alias (__sem_unlink, sem_unlink);
+strong_alias (__sem_unlink, sem_unlink);
Index: libpthread/sysdeps/generic/sem-wait.c
===================================================================
RCS file: /cvsroot/hurd/hurd/libpthread/sysdeps/generic/sem-wait.c,v
retrieving revision 1.1
diff -u -p -r1.1 sem-wait.c
--- libpthread/sysdeps/generic/sem-wait.c	12 May 2005 11:50:42 -0000	1.1
+++ libpthread/sysdeps/generic/sem-wait.c	20 Jan 2007 01:59:26 -0000
@@ -29,4 +29,4 @@ __sem_wait (sem_t *sem)
   return __sem_timedwait_internal (sem, 0);
 }
 
-weak_alias (__sem_wait, sem_wait);
+strong_alias (__sem_wait, sem_wait);

Reply to: