]> git.ipfire.org Git - thirdparty/asterisk.git/commit
taskprocessor: Fix race condition between unreferencing and finding. 64/1164/1
authorJoshua Colp <jcolp@digium.com>
Sat, 29 Aug 2015 15:36:35 +0000 (12:36 -0300)
committerJoshua Colp <jcolp@digium.com>
Sat, 29 Aug 2015 15:44:27 +0000 (10:44 -0500)
commitfc4d4f53792b4867f963824868d1276b1120017f
treebead570df4a895e9b84b97e6399f55a976470fab
parentc036e50fbeffea0fd6352905b87286440f555dbc
taskprocessor: Fix race condition between unreferencing and finding.

When unreferencing a taskprocessor its reference count is checked
to determine if it should be unlinked from the taskprocessors
container and its listener shut down. In between the time when the
reference count is checked and unlinking it is possible for
another thread to jump in, find it, and get a reference to it. If
the thread then uses the taskprocessor it may find that it is not
in the state it expects.

This change locks the taskprocessors container during almost the
entire unreference operation to ensure that any other thread which
may attempt to find the taskprocessor has to wait.

ASTERISK-25295

Change-Id: Icb842db82fe1cf238da55df92e95938a4419377c
main/taskprocessor.c