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: