Block almost all signals in the default locking method instead of

just a few of them.  This looks like it solves the recent

  ld-elf.so.1: assert failed: /usr/src/libexec/rtld-elf/lockdflt.c:55

failures seen by some applications such as JDK.
This commit is contained in:
John Polstra 2000-01-25 01:32:56 +00:00
parent 69a3468578
commit 5bc2f0f789
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=56566
4 changed files with 40 additions and 32 deletions

View File

@ -28,10 +28,9 @@
/*
* Default thread locking implementation for the dynamic linker. It
* is used until the client registers a different implementation with
* dllockinit(). The default implementation does mutual exclusion
* by blocking the SIGVTALRM, SIGPROF, and SIGALRM signals. This is
* based on the observation that most userland thread packages use one
* of these signals to support preemption.
* dllockinit(). The default implementation does mutual exclusion by
* blocking almost all signals. This is based on the observation that
* most userland thread packages use signals to support preemption.
*/
#include <dlfcn.h>
@ -63,10 +62,13 @@ lockdflt_create(void *context)
l = NEW(LockDflt);
l->depth = 0;
sigemptyset(&l->lock_mask);
sigaddset(&l->lock_mask, SIGVTALRM);
sigaddset(&l->lock_mask, SIGPROF);
sigaddset(&l->lock_mask, SIGALRM);
sigfillset(&l->lock_mask);
sigdelset(&l->lock_mask, SIGTRAP);
sigdelset(&l->lock_mask, SIGABRT);
sigdelset(&l->lock_mask, SIGBUS);
sigdelset(&l->lock_mask, SIGSEGV);
sigdelset(&l->lock_mask, SIGKILL);
sigdelset(&l->lock_mask, SIGSTOP);
return l;
}

View File

@ -28,10 +28,9 @@
/*
* Default thread locking implementation for the dynamic linker. It
* is used until the client registers a different implementation with
* dllockinit(). The default implementation does mutual exclusion
* by blocking the SIGVTALRM, SIGPROF, and SIGALRM signals. This is
* based on the observation that most userland thread packages use one
* of these signals to support preemption.
* dllockinit(). The default implementation does mutual exclusion by
* blocking almost all signals. This is based on the observation that
* most userland thread packages use signals to support preemption.
*/
#include <dlfcn.h>
@ -63,10 +62,13 @@ lockdflt_create(void *context)
l = NEW(LockDflt);
l->depth = 0;
sigemptyset(&l->lock_mask);
sigaddset(&l->lock_mask, SIGVTALRM);
sigaddset(&l->lock_mask, SIGPROF);
sigaddset(&l->lock_mask, SIGALRM);
sigfillset(&l->lock_mask);
sigdelset(&l->lock_mask, SIGTRAP);
sigdelset(&l->lock_mask, SIGABRT);
sigdelset(&l->lock_mask, SIGBUS);
sigdelset(&l->lock_mask, SIGSEGV);
sigdelset(&l->lock_mask, SIGKILL);
sigdelset(&l->lock_mask, SIGSTOP);
return l;
}

View File

@ -28,10 +28,9 @@
/*
* Default thread locking implementation for the dynamic linker. It
* is used until the client registers a different implementation with
* dllockinit(). The default implementation does mutual exclusion
* by blocking the SIGVTALRM, SIGPROF, and SIGALRM signals. This is
* based on the observation that most userland thread packages use one
* of these signals to support preemption.
* dllockinit(). The default implementation does mutual exclusion by
* blocking almost all signals. This is based on the observation that
* most userland thread packages use signals to support preemption.
*/
#include <dlfcn.h>
@ -63,10 +62,13 @@ lockdflt_create(void *context)
l = NEW(LockDflt);
l->depth = 0;
sigemptyset(&l->lock_mask);
sigaddset(&l->lock_mask, SIGVTALRM);
sigaddset(&l->lock_mask, SIGPROF);
sigaddset(&l->lock_mask, SIGALRM);
sigfillset(&l->lock_mask);
sigdelset(&l->lock_mask, SIGTRAP);
sigdelset(&l->lock_mask, SIGABRT);
sigdelset(&l->lock_mask, SIGBUS);
sigdelset(&l->lock_mask, SIGSEGV);
sigdelset(&l->lock_mask, SIGKILL);
sigdelset(&l->lock_mask, SIGSTOP);
return l;
}

View File

@ -28,10 +28,9 @@
/*
* Default thread locking implementation for the dynamic linker. It
* is used until the client registers a different implementation with
* dllockinit(). The default implementation does mutual exclusion
* by blocking the SIGVTALRM, SIGPROF, and SIGALRM signals. This is
* based on the observation that most userland thread packages use one
* of these signals to support preemption.
* dllockinit(). The default implementation does mutual exclusion by
* blocking almost all signals. This is based on the observation that
* most userland thread packages use signals to support preemption.
*/
#include <dlfcn.h>
@ -63,10 +62,13 @@ lockdflt_create(void *context)
l = NEW(LockDflt);
l->depth = 0;
sigemptyset(&l->lock_mask);
sigaddset(&l->lock_mask, SIGVTALRM);
sigaddset(&l->lock_mask, SIGPROF);
sigaddset(&l->lock_mask, SIGALRM);
sigfillset(&l->lock_mask);
sigdelset(&l->lock_mask, SIGTRAP);
sigdelset(&l->lock_mask, SIGABRT);
sigdelset(&l->lock_mask, SIGBUS);
sigdelset(&l->lock_mask, SIGSEGV);
sigdelset(&l->lock_mask, SIGKILL);
sigdelset(&l->lock_mask, SIGSTOP);
return l;
}