Fixed deadlock removing input from running InteractiveRender node.
Fixed deadlock removing input from running InteractiveRender node.

We were calling from Python into C++ by calling ViewportGadget::dropSignal() in GadgetWidget, and that was calling Plug::setInput( NULL ), which would then trigger destruction of the renderer in InteractiveRender, which would then start trying to flush buckets and close display drivers on a background thread, which would end up in GafferDisplayDriver, which would emit dataReceivedSignal() or imageReceivedSignal(), which would attempt to enter into python to call the python slots which were connected, but block because the GadgetWidget thread had the GIL. Fun.

Now releasing the GIL in all signal calls, which fixes this and should prevent a host of similar problems in the future.

boberfly/gaffer,boberfly/gaffer,hradec/gaffer,goddardl/gaffer,appleseedhq/gaffer,ImageEngine/gaffer,johnhaddon/gaffer,hradec/gaffer,hradec/gaffer,ivanimanishi/gaffer,hradec/gaffer,goddardl/gaffer,GafferHQ/gaffer,appleseedhq/gaffer,andrewkaufman/gaffer,GafferHQ/gaffer,boberfly/gaffer,cedriclaunay/gaffer,chippey/gaffer,ImageEngine/gaffer,boberfly/gaffer,cedriclaunay/gaffer,lucienfostier/gaffer,andrewkaufman/gaffer,ivanimanishi/gaffer,chippey/gaffer,chippey/gaffer,johnhaddon/gaffer,goddardl/gaffer,andrewkaufman/gaffer,johnhaddon/gaffer,lucienfostier/gaffer,ivanimanishi/gaffer,ivanimanishi/gaffer,appleseedhq/gaffer,GafferHQ/gaffer,GafferHQ/gaffer,johnhaddon/gaffer,andrewkaufman/gaffer,lucienfostier/gaffer,andrewkaufman/gaffer,cedriclaunay/gaffer,ImageEngine/gaffer,lucienfostier/gaffer,appleseedhq/gaffer,cedriclaunay/gaffer,johnhaddon/gaffer,chippey/gaffer,GafferHQ/gaffer,goddardl/gaffer,hradec/gaffer,ImageEngine/gaffer