asterisk/main
Richard Mudgett 69e107b24e res_pjsip_outbound_registration: Fix reload race condition.
Performing a CLI "module reload" command when there are new pjsip.conf
registration objects defined frequently failed to load them correctly.

What happens is a race condition between res_pjsip pushing its reload into
an asynchronous task processor task and the thread that does the rest of
the reloads when it gets to reloading the res_pjsip_outbound_registration
module.  A similar race condition happens between a reload and the CLI/AMI
show registrations commands.  The reload updates the current_states
container and the CLI/AMI commands call get_registrations() which builds a
new current_states container.

* Made res_pjsip.c reload_module() use ast_sip_push_task_synchronous()
instead of ast_sip_push_task() to eliminate two threads processing config
reloads at the same time.

* Made get_registrations() not replace the global current_states container
so the CLI/AMI show registrations command cannot interfere with reloading.
You could never add/remove objects in the container without the
possibility of the container being replaced out from under you by
get_registrations().

* Added a registration loaded sorcery instance observer to purge any dead
registration objects since get_registrations() cannot do this job anymore.
The struct ast_sorcery_instance_observer callbacks must be used because
the callback happens inline with the load process.  The struct
ast_sorcery_observer callbacks are pushed to a different thread.

* Added some global current_states NULL pointer checks in case the
container disappears because of unload_module().

* Made sorcery's struct ast_sorcery_instance_observer.object_type_loaded
callbacks guaranteed to be called before any struct
ast_sorcery_observer.loaded callbacks will be called.

* Moved the check for non-reloadable objects to before the sorcery
instance loading callbacks happen to short circuit unnecessary work.
Previously with non-reloadable objects, the sorcery instance
loading/loaded callbacks would always happen, the individual wizard
loading/loaded would be prevented, and the non-reloadable type logging
message would be logged for each associated wizard.

ASTERISK-24729 #close
Review: https://reviewboard.asterisk.org/r/4381/
........

Merged revisions 431243 from http://svn.asterisk.org/svn/asterisk/branches/13


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@431251 65c4cc65-6c06-0410-ace0-fbb531ad65f3
2015-01-28 04:29:23 +00:00
..
editline cli.c: Fix tab completion "module load" when MALLOC_DEBUG is enabled. 2014-09-22 17:42:26 +00:00
stdtime Allow Asterisk to compile under GCC 4.10 2014-05-09 22:49:26 +00:00
abstract_jb.c func_jitterbuffer: fix frame leaks. 2014-11-02 07:40:57 +00:00
acl.c Fix error with mixed address family ACLs. 2014-11-20 16:37:58 +00:00
adsi.c Allow Asterisk to compile under GCC 4.10 2014-05-09 22:49:26 +00:00
alaw.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
aoc.c stasis: Reduce creation of channel snapshots to improve performance 2014-06-13 18:24:49 +00:00
app.c Various fixes for OS X 2015-01-26 14:50:40 +00:00
ast_expr2.c core: Don't allow free to mean ast_free (and malloc, etc..). 2014-09-26 14:41:38 +00:00
ast_expr2.fl Avoid cppcheck warnings; removing unused vars and a bit of cleanup. 2012-04-17 18:57:40 +00:00
ast_expr2.h Allow the REALTIME() function to report errors back to the caller. 2012-07-11 17:16:50 +00:00
ast_expr2.y core: Don't allow free to mean ast_free (and malloc, etc..). 2014-09-26 14:41:38 +00:00
ast_expr2f.c core: Don't allow free to mean ast_free (and malloc, etc..). 2014-09-26 14:41:38 +00:00
asterisk.c Various fixes for OS X 2015-01-26 14:50:40 +00:00
asterisk.dynamics Fix error loading res_monitor. 2014-04-23 15:02:39 +00:00
asterisk.exports.in Add _IO_stdin_used in version-script to fix SIGBUSes on Sparc. 2013-08-22 08:26:55 +00:00
astfd.c Unregister CLI commands on exit 2013-08-20 15:36:10 +00:00
astmm.c MALLOC_DEBUG: Change fence magic number to be completely different from the freed magic number. 2013-09-09 23:29:44 +00:00
astobj2.c astobj2.c/refcounter.py: Fix to deal with invalid object refs. 2014-09-18 16:56:40 +00:00
astobj2_container.c ao2_container node object ignores REF_DEBUG in all places except one 2014-06-25 18:57:04 +00:00
astobj2_container_private.h astobj2: Additional refactoring to push impl specific code down into the impls. 2014-06-20 15:27:43 +00:00
astobj2_hash.c astobj2: Additional refactoring to push impl specific code down into the impls. 2014-06-20 15:27:43 +00:00
astobj2_private.h astobj2: Additional refactoring to push impl specific code down into the impls. 2014-06-20 15:27:43 +00:00
astobj2_rbtree.c astobj2: Additional refactoring to push impl specific code down into the impls. 2014-06-20 15:27:43 +00:00
audiohook.c audiohooks: Clean references to formats 2014-10-30 23:45:25 +00:00
autochan.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
autoservice.c core: Don't allow free to mean ast_free (and malloc, etc..). 2014-09-26 14:41:38 +00:00
backtrace.c Fix memory corruption when trying to get "core show locks". 2013-08-23 18:07:40 +00:00
bridge.c Bridge core: Pass a ref with the swap channel when joining a bridge. 2015-01-22 19:30:12 +00:00
bridge_after.c Bridges: Fix feature interruption/unintended kick caused by external actions 2014-08-13 16:24:37 +00:00
bridge_basic.c bridge: avoid leaking channel during blond transfer pt2 2015-01-05 22:50:32 +00:00
bridge_channel.c bridge / res_pjsip_sdp_rtp: Fix issues with media not being reinvited during direct media. 2015-01-27 17:34:37 +00:00
bridge_roles.c ARI: bridges/{bridgeID}/addChannel: add roles parameter 2013-08-05 16:59:13 +00:00
bucket.c Allow Asterisk to compile under GCC 4.10 2014-05-09 22:49:26 +00:00
buildinfo.c fix a few small things found by using sparse 2008-10-30 16:49:02 +00:00
callerid.c CallerID: Fix parsing regression 2014-10-10 13:03:18 +00:00
ccss.c Stasis: Allow message types to be blocked 2014-08-06 12:55:28 +00:00
cdr.c Documentation: Revise explanation of cdr.conf option 'Unanswered' 2014-11-14 18:12:05 +00:00
cel.c Fix race condition that could result in ARI transfer messages not being sent. 2014-11-14 15:28:42 +00:00
channel.c presencestate: Allow channel drivers to provide presence state information 2014-12-22 14:33:24 +00:00
channel_internal_api.c Stasis: Fix StasisStart/End order and missing events 2014-12-08 15:45:46 +00:00
chanvars.c res_phoneprov: Refactor phoneprov to allow pluggable config providers 2014-10-09 17:46:23 +00:00
cli.c Call IDs: Fix appearance of call ID in core show channels when NULL 2014-09-05 19:39:04 +00:00
codec.c media: Fix crash when determining sample count of a frame during shutdown. 2014-12-12 17:01:42 +00:00
codec_builtin.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
config.c dynamic realtime: Updates fail to work due to update fields being passed over 2015-01-25 13:43:07 +00:00
config_options.c AMI: Allow for command response documentation 2014-07-24 13:00:59 +00:00
core_local.c Stasis: Allow message types to be blocked 2014-08-06 12:55:28 +00:00
core_unreal.c AMI: Add missing VarSet events when a channel inherits variables. 2014-10-17 02:49:57 +00:00
crypt.c Fix utils directory breakage. 2013-07-04 13:06:15 +00:00
cygload.c Kill off red blobs in most of main/* 2012-03-22 19:51:16 +00:00
data.c data: Properly access formats in capabilities structure when adding codecs. 2014-10-07 18:34:40 +00:00
datastore.c This is no longer needed. 2013-06-29 00:18:57 +00:00
db.c Revert -r430452 It needs to be redone for the next major AMI version change instead. 2015-01-12 18:09:27 +00:00
devicestate.c devicestate.c: Minor tweaks 2014-09-05 17:45:03 +00:00
dial.c Dial API: Add a dial option to indicate the dialed channel will replace dialer 2014-09-05 20:22:12 +00:00
dns.c Clean up files that do not end with newlines 2014-08-21 14:52:28 +00:00
dnsmgr.c Migrate a large number of AMI events over to Stasis-Core 2013-05-24 20:44:07 +00:00
dsp.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
ecdisa.h Kill off red blobs in most of main/* 2012-03-22 19:51:16 +00:00
endpoints.c main/stasis: Allow subscriptions to use a threadpool for message delivery 2014-12-01 17:59:21 +00:00
enum.c Allow Asterisk to compile under GCC 4.10 2014-05-09 22:49:26 +00:00
event.c event.c: Fix type mismatch errors in ie_maps[]. 2014-06-27 23:21:44 +00:00
features.c app_bridge: return to the next dialplan priority 2015-01-09 21:45:10 +00:00
features_config.c Allow for transferer to retry when dialing an invalid extension. 2014-11-17 16:58:52 +00:00
file.c main/file.c: fix possible extra ast_module_unref to format modules. 2014-11-06 12:15:54 +00:00
fixedjitterbuf.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
fixedjitterbuf.h Kill off red blobs in most of main/* 2012-03-22 19:51:16 +00:00
format.c media: Fix crash when determining sample count of a frame during shutdown. 2014-12-12 17:01:42 +00:00
format_cache.c Clean up files that do not end with newlines 2014-08-21 14:52:28 +00:00
format_cap.c Add API call to determine if format capability structure is "empty". 2014-09-18 16:38:26 +00:00
format_compatibility.c chan_iax2: Several media format fixes. 2014-08-07 18:51:16 +00:00
frame.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
framehook.c audiohooks: Reevaluate the bridge technology when an audiohook is added or removed. 2014-10-03 19:42:54 +00:00
fskmodem.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
fskmodem_float.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
fskmodem_int.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
global_datastores.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
hashtab.c core: Don't allow free to mean ast_free (and malloc, etc..). 2014-09-26 14:41:38 +00:00
heap.c Fix incorrect usages of ast_realloc(). 2013-09-10 18:05:47 +00:00
http.c Fix printf problems with high ascii characters after r413586 (1.8). 2014-12-17 10:23:32 +00:00
image.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
indications.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
io.c Allow Asterisk to compile under GCC 4.10 2014-05-09 22:49:26 +00:00
jitterbuf.c jitterbuf: Fix memory leak on jitter buffer reset 2013-10-24 19:42:21 +00:00
json.c Multiple revisions 420089-420090,420097 2014-08-05 21:44:09 +00:00
libasteriskssl.c Resolve memory leaks in TLS initialization and TLS client connections 2012-09-14 19:53:43 +00:00
libasteriskssl.exports.in Address OpenSSL initialization issues when using third-party libraries. 2012-01-30 21:21:16 +00:00
loader.c Fix printf problems with high ascii characters after r413586 (1.8). 2014-12-17 10:23:32 +00:00
lock.c DEBUG_THREADS: Fix regression and lock tracking initialization problems. 2014-12-12 23:49:36 +00:00
logger.c queue_log: Post QUEUESTART entry when Asterisk fully boots. 2014-12-22 20:08:35 +00:00
Makefile main/Makefile: fix compilation error of buildinfo occurring on 'make install' 2014-07-04 15:26:58 +00:00
manager.c Manager: Fix Manager Action ModuleLoad to give correct response when reloading 2015-01-27 19:31:29 +00:00
manager_bridges.c Fix typo's (retrieve, specified, address). 2015-01-23 15:13:08 +00:00
manager_channels.c ARI/AMI: Include language in standard channel snapshot output 2014-12-09 20:20:27 +00:00
manager_endpoints.c Multiple revisions 399887,400138,400178,400180-400181 2013-09-30 18:55:27 +00:00
manager_mwi.c Multiple revisions 399887,400138,400178,400180-400181 2013-09-30 18:55:27 +00:00
manager_system.c Multiple revisions 399887,400138,400178,400180-400181 2013-09-30 18:55:27 +00:00
md5.c md5: supress some compiler warnings. 2012-04-28 01:33:49 +00:00
media_index.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
message.c message: Don't close an AMI connection on SendMessage action error 2014-10-06 18:39:54 +00:00
mixmonitor.c Removed quotes from svn:keywords props on a few files. 2013-07-29 17:51:25 +00:00
named_acl.c acl: Fix reloading of configuration if configuration file does not exist at startup. 2014-12-20 20:57:47 +00:00
netsock.c Move eid functions to utils.c, mark netsock.h deprecated 2014-06-24 02:50:15 +00:00
netsock2.c pjsip cli: Change Identify to show CIDR notation instead of netmasks. 2014-06-19 20:13:20 +00:00
optional_api.c Logger/CLI/etc.: Fix some aesthetic issues; reduce chatty verbose messages 2014-05-28 22:54:12 +00:00
parking.c res_pjsip_refer: Fix bugs involving Parking/PJSIP/transfers 2014-05-22 15:52:30 +00:00
pbx.c Call extension state callbacks at hint creation. 2015-01-19 18:15:03 +00:00
pickup.c Stasis: Allow message types to be blocked 2014-08-06 12:55:28 +00:00
plc.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
poll.c Merged revisions 285268 via svnmerge from 2010-09-07 19:09:08 +00:00
presencestate.c presencestate: Allow channel drivers to provide presence state information 2014-12-22 14:33:24 +00:00
privacy.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
rtp_engine.c Various fixes for OS X 2015-01-26 14:50:40 +00:00
say.c app_voicemail, say: Add support for Japanese Language 2014-06-30 04:00:19 +00:00
sched.c Scheduler: Fix a nasty scheduler caching bug which makes new tasks not execute 2014-10-14 19:12:58 +00:00
sdp_srtp.c sdp_srtp: Add new lines to some WARNING messages 2014-10-06 12:39:03 +00:00
security_events.c Stasis: Allow message types to be blocked 2014-08-06 12:55:28 +00:00
sem.c Various fixes for OS X 2015-01-26 14:50:40 +00:00
sha1.c Doxygen Updates - janitor work 2012-09-21 17:14:59 +00:00
sip_api.c Don't make chan_sip export global symbols. 2012-10-11 15:49:02 +00:00
slinfactory.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
smoother.c media formats: re-architect handling of media for performance improvements 2014-07-20 22:06:33 +00:00
sorcery.c res_pjsip_outbound_registration: Fix reload race condition. 2015-01-28 04:29:23 +00:00
sounds_index.c Indexer: Format message types may not exist 2014-10-08 14:54:54 +00:00
srv.c Removed #if checks for crazy old versions of OS X. 2013-05-08 20:25:28 +00:00
stasis.c main/stasis: Allow subscriptions to use a threadpool for message delivery 2014-12-01 17:59:21 +00:00
stasis_bridges.c Fix race condition that could result in ARI transfer messages not being sent. 2014-11-14 15:28:42 +00:00
stasis_cache.c main/stasis: Allow subscriptions to use a threadpool for message delivery 2014-12-01 17:59:21 +00:00
stasis_cache_pattern.c stasis: use ao2_t_alloc for certain object allocators 2014-07-18 19:55:24 +00:00
stasis_channels.c ARI/AMI: Include language in standard channel snapshot output 2014-12-09 20:20:27 +00:00
stasis_endpoints.c Stasis: Allow message types to be blocked 2014-08-06 12:55:28 +00:00
stasis_message.c Stasis: Allow message types to be blocked 2014-08-06 12:55:28 +00:00
stasis_message_router.c res_pjsip: make it unloadable (take 2) 2015-01-27 19:12:56 +00:00
stasis_system.c Stasis: Allow message types to be blocked 2014-08-06 12:55:28 +00:00
strcompat.c Add builtin roundf() for systems lacking it. 2013-01-19 20:54:07 +00:00
strings.c Add support for RFC 4662 resource list subscriptions. 2014-08-07 19:26:32 +00:00
stun.c stun: correct attribute string padding to match rfc 2014-11-14 15:52:21 +00:00
syslog.c main/syslog: Allow dynamic logs, such as security events, to log to the syslog 2015-01-12 18:01:46 +00:00
taskprocessor.c chan_pjsip: Fix deadlock when masquerading PJSIP channels. 2014-10-03 17:47:42 +00:00
tcptls.c tcptls: Bad file descriptor error when reloading chan_sip 2015-01-27 22:58:44 +00:00
tdd.c core: Don't allow free to mean ast_free (and malloc, etc..). 2014-09-26 14:41:38 +00:00
term.c Revamp of terminal color codes 2013-02-14 18:47:56 +00:00
test.c main/test: Fix compilation issue on 32-bit systems 2014-12-04 17:13:48 +00:00
threadpool.c threadpool.c: Minor cleanup fixes. 2014-09-29 20:28:24 +00:00
threadstorage.c Unregister CLI commands on exit 2013-08-20 15:36:10 +00:00
timing.c timing: Improve performance for most timing implementations. 2014-02-07 20:01:45 +00:00
translate.c translage.c: Fix regression when generating translation path strings. 2014-10-21 18:04:43 +00:00
udptl.c Fix printf problems with high ascii characters after r413586 (1.8). 2014-12-17 10:23:32 +00:00
ulaw.c Multiple revisions 369001-369002 2012-06-15 16:20:16 +00:00
uri.c uri: Quiet warning about type qualifiers ignored on function return type 2014-08-21 14:42:12 +00:00
utils.c Fix printf problems with high ascii characters after r413586 (1.8). 2014-12-17 10:23:32 +00:00
uuid.c Fix printf problems with high ascii characters after r413586 (1.8). 2014-12-17 10:23:32 +00:00
xml.c Detect and use xsltCleanupGlobals when available 2013-10-03 18:00:15 +00:00
xmldoc.c xmldocs: Add support for an <example> tag in the Asterisk XML Documentation 2014-07-31 11:49:40 +00:00