<div dir="ltr"> Hi.<div><br></div><div>I am in the middle of refactoring a library, which I am going to publish open source.</div><div>I found mysefl stuck reconsidering API in terms of interobject communication.</div><div><br></div><div>There is a central class that have several signals, and I try to imagine what library user could do in corresponding slots: </div><div>Should deleting an instance be possible from directly connected slot?</div><div>What should happen if one reenters event loop in a directly connected slot? Should processing continue or lock?</div><div><br></div><div>In general, API is asynchronous in sense that methods just set some target state and use queued connection to do processing from event loop and signals just mark some events.</div><div><br></div><div>Qt itself has nice documentation that, for example, flags some method to be reentrant or thead safe. But synchronous or asynchronous, event loop reentry or deletion behavior is rarely described in detailed section. So I struggle to find a reference implementation.</div><div><br></div><div>I wonder:</div><div>Does anyone consider these problems designing or using APIs?</div><div>Do you expect an object to continue processing even if control flow was taken into event loop via direct signal slot connection?</div><div>What is the correct term or category to define event loop reentry safety?</div><div><br></div><div>Will appreciate any comments.</div><div>Wishes.</div><div><br></div><div><a href="https://doc.qt.io/qt-5/signalsandslots.html" target="_blank">https://doc.qt.io/qt-5/signalsandslots.html</a><br></div><div><a href="https://doc.qt.io/qt-5/threads-reentrancy.html" target="_blank">https://doc.qt.io/qt-5/threads-reentrancy.html</a></div><div><a href="https://doc.qt.io/qt-5/qiodevice.html#bytesWritten" target="_blank">https://doc.qt.io/qt-5/qiodevice.html#bytesWritten</a><br></div><div><a href="https://doc.qt.io/qt-5/qthread.html#finished" target="_blank">https://doc.qt.io/qt-5/qthread.html#finished</a><br></div><div><a href="https://wiki.qt.io/API_Design_Principles" target="_blank">https://wiki.qt.io/API_Design_Principles</a><br></div><div><a href="https://github.com/qt/qtbase/blob/5.12/src/corelib/thread/qthread_win.cpp#L403" target="_blank">https://github.com/qt/qtbase/blob/5.12/src/corelib/thread/qthread_win.cpp#L403</a></div><div><a href="https://github.com/qt/qtbase/blob/5.12/src/corelib/thread/qthread_unix.cpp#L400" target="_blank">https://github.com/qt/qtbase/blob/5.12/src/corelib/thread/qthread_unix.cpp#L400</a><div class="gmail-yj6qo"></div><div class="gmail-adL"><br></div></div></div>