Signal handling is at per process handling in Linux (in *nix systems generally). IMHO it is wrong idea using it in linked-in drivers at all. You will end up with unmaintainable mess because each change in signal handling in erts or any other linked-in driver will break whole system.<br>
<br>From man page:<br><br>       sigwait  suspends  the  calling  thread until one of the signals in set is delivered to the calling thread. It then stores the number of the<br>       signal received in the location pointed to by sig and returns. The signals in set must be blocked and not ignored on entrance to sigwait. If<br>
       the delivered signal has a signal handler function attached, that function is not called.<br><br>As you can see, you can easily break things there. For example may be you wait for same signal which is vital for erl_ddll:load or any other part of erts.<br>
<br><div class="gmail_quote">On Sat, Apr 18, 2009 at 2:00 AM, Rob Elsner <span dir="ltr"><<a href="mailto:thatsnotright@gmail.com">thatsnotright@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="h5">Greetings,<br>
<br>
I've been tinkering with the Linux timer API (following the examples<br>
given by the rt-tests programs) and a simple linked driver with<br>
Erlang.  This is my first foray into each of these, so forgive me if<br>
I'm over looking something simple.<br>
<br>
I'm using Gentoo Linux localhost 2.6.27-gentoo-r8 #4 SMP PREEMPT Fri<br>
Apr 17 08:19:37 MDT 2009 x86_64 AMD Athlon(tm) 64 X2 Dual Core<br>
Processor 5000+ AuthenticAMD GNU/Linux<br>
<br>
as well as erl Erlang (BEAM) emulator version 5.6.5 [source] [64-bit]<br>
[smp:2] [async-threads:0] [hipe] (I've tested with and without hipe)<br>
<br>
What I've found is that if I comment out my use of sigwait (which is<br>
in the process handler), erl_ddll:load will return ok.  If I leave<br>
this in, erl_ddll:load returns -10 status.<br>
<br>
Has anyone seen something like this?  Does anyone have more useful<br>
ideas how I can figure out why it's failing?  I was assuming a library<br>
mismatch but I can't figure out what, and I even leave in other sig*<br>
functions (such as sigemptyset and sigprocmask).<br>
<br>
I build with -fPIC -lrt -m64 -shared<br>
<br>
Thanks in advance,<br>
Rob Elsner<br>
<br>
Here's a quick strace of the output:<br>
<br>
11683 getcwd("/home/me/workspace/timer/timer_test/ebin"..., 8191) = 38<br>
11683 open("./timer_drv.so", O_RDONLY)  = 7<br>
11683 read(7, "\177ELF\2\1\1\0\0\0\0\0\0\0\0\0\3\0>\0\1\0\0\0\300\n\0\0\0\0\0\0@"...,<br>
832) = 832<br>
11683 fstat(7, {st_mode=S_IFREG|0755, st_size=12728, ...}) = 0<br>
11683 getcwd("/home/me/workspace/timer/timer_test/ebin"..., 128) = 38<br>
11683 mmap(NULL, 2105776, PROT_READ|PROT_EXEC,<br>
MAP_PRIVATE|MAP_DENYWRITE, 7, 0) = 0x7fa7b62b8000<br>
11683 mprotect(0x7fa7b62ba000, 2093056, PROT_NONE) = 0<br>
11683 mmap(0x7fa7b64b9000, 8192, PROT_READ|PROT_WRITE,<br>
MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 7, 0x1000) = 0x7fa7b64b9000<br>
11683 close(7)                          = 0<br>
11683 munmap(0x7fa7b62b8000, 2105776)   = 0<br>
11683 clock_gettime(CLOCK_MONOTONIC, {8538, 165029854}) = 0<br>
11683 write(4, "!"..., 1)               = 1<br>
11684 <... poll resumed> )              = 1 ([{fd=3,<br>
revents=POLLIN|POLLRDNORM}])<br>
11684 read(3,  <unfinished ...><br>
11683 ioctl(0, TIOCGWINSZ <unfinished ...><br>
11684 <... read resumed> "!"..., 32)    = 1<br>
11683 <... ioctl resumed> , {ws_row=48, ws_col=247, ws_xpixel=1486,<br>
ws_ypixel=628}) = 0<br>
11684 read(3, 0x4350e6f0, 32)           = -1 EAGAIN (Resource<br>
temporarily unavailable)<br>
11684 clock_gettime(CLOCK_MONOTONIC, {8538, 168957734}) = 0<br>
11683 getcwd( <unfinished ...><br>
11684 clock_gettime(CLOCK_MONOTONIC, {8538, 170047654}) = 0<br>
11683 <... getcwd resumed><br>
"/home/me/workspace/timer/timer_test/ebin"..., 8191) = 38<br>
11684 poll([{fd=3, events=POLLIN|POLLRDNORM}, {fd=0,<br>
events=POLLIN|POLLRDNORM}], 2, 3593783 <unfinished ...><br>
11683 stat("/home/me/workspace/timer/timer_test/ebin/./io_lib_pretty.beam",<br>
0x42d0dd20) = -1 ENOENT (No such file or directory)<br>
11683 open("/home/me/workspace/timer/timer_test/ebin/./io_lib_pretty.beam",<br>
O_RDONLY) = -1 ENOENT (No such file or directory)<br>
11683 stat("/usr/lib64/erlang/lib/kernel-2.12.5/ebin/io_lib_pretty.beam",<br>
0x42d0dd20) = -1 ENOENT (No such file or directory)<br>
11683 open("/usr/lib64/erlang/lib/kernel-2.12.5/ebin/io_lib_pretty.beam",<br>
O_RDONLY) = -1 ENOENT (No such file or directory)<br>
11683 stat("/usr/lib64/erlang/lib/stdlib-1.15.5/ebin/io_lib_pretty.beam",<br>
{st_mode=S_IFREG|0644, st_size=27804, ...}) = 0<br>
11683 open("/usr/lib64/erlang/lib/stdlib-1.15.5/ebin/io_lib_pretty.beam",<br>
O_RDONLY) = 7<br>
11683 read(7, "FOR1\0\0l\224BEAMAtom\0\0\3|\0\0\0^\rio_lib_p"..., 27804) = 27804<br>
11683 close(7)                          = 0<br>
11683 getcwd("/home/me/workspace/timer/timer_test/ebin"..., 8191) = 38<br>
11683 write(4, "!"..., 1 <unfinished ...><br>
11684 <... poll resumed> )              = 1 ([{fd=3,<br>
revents=POLLIN|POLLRDNORM}])<br>
11684 read(3, "!"..., 32)               = 1<br>
11684 read(3, 0x4350e6f0, 32)           = -1 EAGAIN (Resource<br>
temporarily unavailable)<br>
11684 clock_gettime(CLOCK_MONOTONIC, {8538, 194262414}) = 0<br>
11684 futex(0x89bc40, FUTEX_WAIT, 2, NULL <unfinished ...><br>
11683 <... write resumed> )             = 1<br>
11683 futex(0x89bc40, FUTEX_WAKE, 1 <unfinished ...><br>
11684 <... futex resumed> )             = 0<br>
11684 futex(0x89bc40, FUTEX_WAKE, 1)    = 0<br>
11684 clock_gettime(CLOCK_MONOTONIC, {8538, 197150974}) = 0<br>
11684 clock_gettime(CLOCK_MONOTONIC, {8538, 197823334}) = 0<br>
11684 poll([{fd=3, events=POLLIN|POLLRDNORM}, {fd=0,<br>
events=POLLIN|POLLRDNORM}], 2, 3593755 <unfinished ...><br>
11683 <... futex resumed> )             = 1<br>
11683 write(0, "{error,{open_error,-10}}"..., 24) = 24<br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://www.erlang.org/mailman/listinfo/erlang-questions" target="_blank">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br><br clear="all"><br>-- <br>--Hynek (Pichi) Vychodil<br><br>Analyze your data in minutes. Share your insights instantly. Thrill your boss.  Be a data hero!<br>Try Good Data now for free: <a href="http://www.gooddata.com">www.gooddata.com</a><br>