[Serusers] Core dump in custom dispatcher code

Alistair Cunningham acunningham at integrics.com
Mon Aug 15 23:08:24 CEST 2005


I've trying to add support to the dispatcher module for reloading its 
configuration file on a fifo command. This allows an external daemon to 
monitor a set of external Asterisk machines, detect when they fail, and 
round robin calls between the surviving ones.

I'm (I think) most of the way there. I can issue the command, and see
the reload happening, but I see a core dump:

[root at test dispatcher]# serctl fifo dispatcher_reload

  2(31672) DISPATCHER:ds_load_list: dest [135343048/135343048/21]
<sip:1.2.3.4:5060>
  2(31672) DISPATCHER:ds_load_list: dest [0/1/1] <sip:1.2.3.4:5060>
  2(31672) DISPATCHER:ds_load_list: found [1] dest sets
  0(31670) child process 31672 exited by a signal 11
  0(31670) core was generated

(IP address changed to protect the guilty)

I've had a look at the code, and don't really understand why it's
happening. A gdb backtrace shows:

(gdb) bt
#0  ds_load_list (lfile=0x8112b98 "È+\021\b\025") at dispatch.c:281
281                             dp = dp->next;
#0  ds_load_list (lfile=0x8112b98 "È+\021\b\025") at dispatch.c:281
#1  0x0017cacf in dispatcher_reload (pipe=0xa1f5d30,
response_file=0x8112378 "/tmp/ser_receiver_31623")
     at dispatcher.c:170
#2  0x08057456 in start_fifo_server () at fifo_server.c:540
#3  0x0805caf5 in main_loop () at main.c:988
#4  0x0805e52b in main (argc=3, argv=0xbffa3584) at main.c:1568

I've modified dispatcher.c. In mod_init, I've added:

         if (register_fifo_cmd(dispatcher_reload, "dispatcher_reload",
0) < 0)
         {
                 LOG(L_ERR, "Cannot register dispatcher_reload\n");
                 return -1;
         }

and added a new function:

static int dispatcher_reload ( FILE* pipe, char* response_file )
{
         ds_destroy_list ();
         if (ds_load_list(dslistfile)==0) {
                 fifo_reply (response_file, "200 OK\n");
                 return 1;
         } else {
                 fifo_reply (response_file, "400 Dispatcher reload
failed\n");
                 return -1;
         }
}

Can anyone shed light on this?

-- 
Alistair Cunningham,
Integrics Ltd,
+44 (0)7870 699 479
http://integrics.com/




More information about the sr-users mailing list