ros/actionlib — pull request #5 by miguelsdc (2013-07-15 16:54:41+00:00)
Title: Fix deadlock in simple_action_server.py

Deadlock was caused by race condition between internal_goal_callback() and accept_new_goal().

Fixed by:
a) Ensuring accept_new_goal acquires locks in same order as internal_goal_callback (action_server.lock first, self.lock second)
b) Checking if there's a new task available is now lock-free (to avoid acquiring self.lock before action_server.lock)

I believe this commit should not change the internal state transitions of simple_action_server, so everything that was working should keep working.

I tested that the code removes the deadlock using the callback style. Polling implementations were not tested.

Best, Miguel S.