You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I think I've found a serious bug in CsSignal. I had several program crashes before I figured out what was going on.
If we have two objects assigned to two different threads (so these two threads decide when to destroy those objects), and one object gets destroyed by its associated thread while another object emits a signal, this line of code will crash the entire program:
The problem here is the following: the receiver is half-destroyed and it didn't have any chance to disconnect itself in its own thread (base destructor runs last), but another thread !synchronously! tests the receiver's thread affinity and then even calls receiver->queueSlot() on that half-destroyed object.
This makes the entire activate() method not thread safe.
The text was updated successfully, but these errors were encountered:
Thanks for reporting this, it sounds like you have done a lot of work to track this down. We will investigate and start looking at how to address this issue.
I think I've found a serious bug in CsSignal. I had several program crashes before I figured out what was going on.
If we have two objects assigned to two different threads (so these two threads decide when to destroy those objects), and one object gets destroyed by its associated thread while another object emits a signal, this line of code will crash the entire program:
cs_signal/src/cs_signal.h
Line 183 in f20001a
The problem here is the following: the receiver is half-destroyed and it didn't have any chance to disconnect itself in its own thread (base destructor runs last), but another thread !synchronously! tests the receiver's thread affinity and then even calls receiver->queueSlot() on that half-destroyed object.
This makes the entire activate() method not thread safe.
The text was updated successfully, but these errors were encountered: