pbx_dundi.c: Misc memory management fixes when destroying peers
authorRichard Mudgett <rmudgett@digium.com>
Thu, 16 Aug 2018 02:31:45 +0000 (21:31 -0500)
committerRichard Mudgett <rmudgett@digium.com>
Fri, 17 Aug 2018 19:25:27 +0000 (14:25 -0500)
commit273e2802aa166a3e6e84947d29e374ffd76cc53c
tree399d836fdc909a96db8cf56993f766d4f23b7478
parent5cd416f3546938ec268ec54a7fd6b04a8f37b5ab
pbx_dundi.c: Misc memory management fixes when destroying peers

* In destroy_peer(), fixed memory leaks of lookup history strings and
qualify transactions when destroying peers.

* In destroy_peer(), fixed leaving the registerexpire scheduled callback
active when a peer is destroyed on a reload.  The reload marks and sweeps
peers so any peers not explicitly configured get destroyed.  Peers created
dynamically from the '*' peer will not exist until they re-register after
the reload.  These destroyed peers caused memory corruption when the
registerexpire timer expired.

* Made build_peer() not schedule any callbacks on the '*' peer
(empty_eid).  It is a special peer that is cloned to dynamically created
peers so it doesn't actually get involved in any message transactions.

* Made do_register_expire() remove the dundi/dpeers AstDB entry when a
peer registration expires.

* Fix deep_copy_peer() to not copy some things that cannot be copied to
the cloned peer structure.  Timers, message transactions, and lookup
history are specific to a peer instance.

* Made set_config() lock around processing the mappings configuration.

* Reordered unload_module() to handle load_module() declining the load due
to error.

Change-Id: Ib846b2b60d027f3a2c2b3b563d9a83a357dce1d6
pbx/pbx_dundi.c