[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [Libevent-users] Possible to use libevent to handle SIGTERM and SIGQUIT



On Tue, Aug 30, 2011 at 1:46 PM, Kun Xi <kunxi@xxxxxxxxx> wrote:
> Hello,
>
> I just wondered whether libevent event loop can handle the SIGTERM and
> SIGQUIT appropriately.  Here is the code snippet I am trying to exit
> the message loop gracefully and brutally:
>
> static void quick_shutdown(evutil_socket_t _, short what, void* ctx) {
>    struct event_base *evb = (struct event_base*) ctx;
>    event_base_loopbreak(evb);
> }
>
> static void graceful_shutdown(evutil_socket_t _, short what, void* ctx) {
>    struct event_base *evb = (struct event_base*) ctx;
>    event_base_loopexit(evb, NULL);
> }
>
> // main()
>    /* signal handling */
>    struct event *quit = evsignal_new(base, SIGQUIT, graceful_shutdown, base);
>    struct event *term = evsignal_new(base, SIGTERM, quick_shutdown, base);
>
>    /* message loop */
>    event_base_dispatch(base);
>
>    /* cleanup the mess */
>    event_free(quit);
>    event_free(term);
>    event_base_free(base);
>    return 0;
>
> I expect that the process exits the message loop with kill -15 or kill
> -3. But it never happens. I wonder whether something wrong with my
> code, or we should not use libevent to handle SIGQUIT and SIGTERM.

Looks like you never called event_add() on those events.
evsignal_new(), like event_new(), only creates a new event: you need
to use event_add() to make the base start watching for it.

cheers,
-- 
Nick
***********************************************************************
To unsubscribe, send an e-mail to majordomo@xxxxxxxxxxxxx with
unsubscribe libevent-users    in the body.