That's completely beyond the scope of my tiny brain :-) Anybody got any
ideas? I would assume its some sort of build flag stuff or something like
that? Or what libraries are being brought in?

----------------------------------------
Dean Roddey
Software Weenie
IBM Center for Java Technology - Silicon Valley
[EMAIL PROTECTED]



John Ward <[EMAIL PROTECTED]>@e3.ny.us.ibm.com on 04/04/2000 03:17:15 PM

Please respond to [EMAIL PROTECTED]

Sent by:  [EMAIL PROTECTED]


To:   [EMAIL PROTECTED]
cc:
Subject:  xerces linking side effect ...



I'm having some real trouble with mixing signals and xerces.

I've attached a sample program (small) that sets up a signal handler to
printout a message when a signal is caught.  I get different results
depending on whether or not I link with the xerces library or not
(!NOTE! this sample code does  nothign with xerces other than link to
it!)

When I run the test program which simply sets up a handler for all
signals between 0 and SIGRTMAX (0 to 64 or so) I then send corresponding
kill signals to the program and watch them get caught by the handler and
thus printed out.

When I send kill -32 <pid> for some reason the handler doesn't get
called.

Same with single 33, and 34 ... but ALL of the rest of them get printed
out.

Why am I asking this to a xerces person? well this behavior ONLY happens
when I link with the xerces library.  MOST ODD!

My compile line is as follows:

gcc test.c -L/xerces/lib -lxerces-c1_1

I'm using xerces 1_1_0 for linux.

Please note this is a sample of the problem, my larger program uses
xerces (obviously) but I was just trying to narrow the problem down, and
that's how I ended up isolating the xerces lib ... unless I'm missing
something here.  I'd love to see if someone can duplicate it.

Thanks for any help in advance,
John Ward
[EMAIL PROTECTED]

--------------------
#include <stdio.h>
#include <signal.h>

void SignalHandler(int sig)
     fprintf(stdout, "Handler, sig = %d\n", sig);
}

main(int argc, char **argv) {
     struct sigaction act;

     int i;


     sigfillset(&act.sa_mask);
     act.sa_handler = MyStupidSignalHandler;
     act.sa_flags = 0;

     for (i = 0; i < SIGRTMAX; i++) {
          if (sigaction(i, &act, NULL) == -1) {
               fprintf(stdout, "can't sigact %d\n", i);
          }
     }

     while (1) {

     }
}



Reply via email to