This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! The attached testcase fails with current CVS (when not linked against -lpthread): tgkill(32233, 32233, SIGUSR1) = 0 --- SIGUSR1 (User defined signal 1) @ 0 (0) --- sigreturn() = ? (mask now []) tgkill(0, 32233, SIGUSR1) = -1 EINVAL (Invalid argument) Don't know where to put the tst-raise1.c testcase, signal/ or somewhere else (nptl/ is bad, since it should not be linked against -lpthread)? Additionally, I think there is a race. If fork () is called when getpid () has never been called before in the program, then after the self->pid = -parentpid; in fork.c but before the clone () syscall a signal is received which calls getpid () and another signal is received in the child before self->pid = self->tid setting, getpid () in that signal handler will return incorrect value. The attached patch should cure both. Performance wise, I tried: #include <stdio.h> #include <dlfcn.h> int main (void) { int i; unsigned long long st, en, mi = ~0ULL; for (i = 0; i < 100; ++i) { asm volatile ("rdtsc" : "=A" (st)); getpid (); asm volatile ("rdtsc" : "=A" (en)); if (en - st < mi) mi = en - st; } printf ("%lld ticks\n", mi); dlopen ("libpthread.so.0", RTLD_LAZY); mi = ~0ULL; for (i = 0; i < 100; ++i) { asm volatile ("rdtsc" : "=A" (st)); getpid (); asm volatile ("rdtsc" : "=A" (en)); if (en - st < mi) mi = en - st; } printf ("%lld ticks\n", mi); } on my PIII, against the installed glibc which doesn't yet have any of the getpid changes it prints 356 ticks 357 ticks against CVS libc.so: 37 ticks 39 ticks and against CVS+this patch: 41 ticks 38 ticks I've moved pid field closer to tid, so that they share a cache line when they are used so often together. Jakub
Attachment:
P1
Description: Text document
Attachment:
tst-raise1.c
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |