On Friday 15 September 2006 08:39, Gerhard Jaeger wrote: > [...] > So the point to fix are inside the backends. If someone could > provide a testcase, this could be easily fixed.
An example for SIGCHLD (as mentioned by Ryan): ------------- Main program ---------------- int main(int argc, char **argv) { void *so; void (*foo)(); so = dlopen("./test1.so", RTLD_LAZY); foo = dlsym(so, "foo"); foo(); /* I don't need the library anymore. So I unload it. */ dlclose(so); system("echo hello"); /* SIGSEGV here. */ return 0; } ------------- test1.so ----------------- static void sighandler(int sig) { } void foo(void) { struct sigaction sa; memset(&sa, 0, sizeof(sa)); sigemptyset(&sa.sa_mask); sa.sa_handler = sighandler; sigaction(SIGCHLD, &sa, NULL); /* forget to restore SIGCHLD handler. */ } ---------------------------------------- "grep -l SIGCHLD *.c" in the backend directory gives: artec_eplus48u.c mustek.c plustek.c plustek_pp.c u12.c Regards -- Wittawat Yamwong Hannover, Germany