[asterisk-dev] [Code Review] 2562: Avoid unnecessary cleanups during immediate shutdown
opticron
reviewboard at asterisk.org
Wed May 29 15:18:30 CDT 2013
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/2562/#review8722
-----------------------------------------------------------
Ship it!
Ship It!
- opticron
On May 23, 2013, 9:58 a.m., David Lee wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/2562/
> -----------------------------------------------------------
>
> (Updated May 23, 2013, 9:58 a.m.)
>
>
> Review request for Asterisk Developers and rmudgett.
>
>
> Repository: Asterisk
>
>
> Description
> -------
>
> This patch addresses issues during immediate shutdowns, where modules
> are not unloaded, but Asterisk atexit handlers are run.
>
> In the typical case, this usually isn't a big deal. But the
> introduction of the Stasis message bus makes it much more likely for
> asynchronous activity to be happening off in some thread during
> shutdown.
>
> During an immediate shutdown, Asterisk skips unloading modules. But
> while it is processing the atexit handlers, there is a window of time
> where some of the core message types have been cleaned up, but the
> message bus is still running. Specifically, it's still running
> module subscriptions that might be using the core message types. If a
> message is received by that subscription in that window, it will
> attempt to use a message type that has been cleaned up.
>
> To solve this problem, this patch introduces ast_register_cleanup().
> This function operates identically to ast_register_atexit(), except
> that cleanup calls are not invoked on an immediate shutdown. All of
> the core message type and topic cleanup was moved from atexit handlers
> to cleanup handlers.
>
> This ensures that core type and topic cleanup only happens if the
> modules that used them are first unloaded.
>
> This patch also changes the ast_assert() when accessing a cleaned up
> or uninitialized message type to an error log message. Message type
> functions are actually NULL safe across the board, so the assert was a
> bit heavy handed. Especially for anyone with DO_CRASH enabled.
>
>
> Diffs
> -----
>
> /trunk/main/stasis.c 389546
> /trunk/main/security_events.c 389546
> /trunk/main/presencestate.c 389546
> /trunk/main/named_acl.c 389546
> /trunk/main/devicestate.c 389546
> /trunk/main/channel.c 389546
> /trunk/main/bridging.c 389546
> /trunk/main/asterisk.c 389546
> /trunk/main/app.c 389546
> /trunk/include/asterisk/stasis_channels.h 389546
> /trunk/include/asterisk/stasis_bridging.h 389546
> /trunk/include/asterisk/stasis.h 389546
> /trunk/include/asterisk/security_events.h 389546
> /trunk/include/asterisk.h 389546
> /trunk/main/stasis_bridging.c 389546
> /trunk/main/stasis_cache.c 389546
> /trunk/main/stasis_channels.c 389546
> /trunk/main/test.c 389546
>
> Diff: https://reviewboard.asterisk.org/r/2562/diff/
>
>
> Testing
> -------
>
> core stop {now,gracefully} both with and without active channels.
>
>
> Thanks,
>
> David Lee
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20130529/0d2dd359/attachment-0001.htm>
More information about the asterisk-dev
mailing list