Another problem: my kernel doesn't seem to be delivering the SIGALRM the
second time around.
Works like a champ on Solaris though. I don't know if it has anything to
do with the execv or not.

agent/mibgroup/util_funcs.c:
        signal(SIGALRM, restart_doit);
        unsigned int atime = alarm(RESTARTSLEEP);
        snmp_log(LOG_NOTICE, "alarm returned %u\n", atime);

restart_doit never gets called, that i can tell.
The setitimer in snmp_alarm is never called.
kill -s SIGALRM ${PID} doesn't get it done either.
sigpending always shows 0.

2.4.21-20.ELsmp #1 SMP

The following seems to run forever though, so its' not quite the same
somehow.

#include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <signal.h>

static unsigned int atime = 0;
static char *myargs[2] = { "/tmp/sig", NULL };

void callback(int a) {
  printf("callback\n");
}

int main(void) {

  unsigned int loop = 0;

  printf("setting alarm 1, for 3 secs\n");
  signal(SIGALRM, callback);
  atime = alarm(3);
  printf("atime=%u\n", atime);
  printf("waitread 5...\n");
  waitread();

  printf("setting alarm 2, for 3 secs\n");
  signal(SIGALRM, callback);
  atime = alarm(3);
  printf("atime=%u\n", atime);
  printf("waitread\n");
  waitread();

       execv("/tmp/sig", myargs);

  printf("setting alarm 3, for 3 secs\n");
  signal(SIGALRM, callback);
  atime = alarm(3);
  printf("atime=%u\n", atime);
  printf("waitread\n");
  waitread();

  printf("DONE\n");
  return 0;

}


int waitread() {

           fd_set rfds;
           struct timeval tv;
           int retval;

           /* Watch stdin (fd 0) to see when it has input. */
           FD_ZERO(&rfds);
           FD_SET(0, &rfds);
           /* Wait up to five seconds. */
           tv.tv_sec = 5;
           tv.tv_usec = 0;

           retval = select(1, &rfds, NULL, NULL, &tv);

           if (retval == -1)
               perror("select()");
           else if (retval)
               printf("Data is available now.\n");
               /* FD_ISSET(0, &rfds) will be true. */
           else
               printf("No data within five seconds.\n");

return 0;
}





-------------------------------------------------------
SF email is sponsored by - The IT Product Guide
Read honest & candid reviews on hundreds of IT Products from real users.
Discover which products truly live up to the hype. Start reading now.
http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click
_______________________________________________
Net-snmp-coders mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/net-snmp-coders

Reply via email to