zbentley commented on issue #11823:
URL: https://github.com/apache/pulsar/issues/11823#issuecomment-907623129


   > Does removing the call of PyErr_Print really work?
   
   I believe so, though that only solves part of the issue. Without the call to 
PyErr_Print, return values aren't altered. However, the logger won't work in 
those situations (destruction after an async return) even without the call to 
PyErr_Print, as boost::python::call fails before invoking the requested 
function in that context.
   
   > a temporary solution is to avoid C++ object's destructor in async functions
   
   That does indeed work. However, because the Pulsar client is heavily 
asynchronous, I don't think that workaround is practical. Consider a big python 
prorgram with lots of async code that instantiates a Pulsar client globally. 
Any time that client logs for any reason (not just destructors), there's a 
chance that the logging action happens while the interpreter is returning from 
an async function, in which case this bug will occur--even if the async 
functions running have nothing to do with Pulsar in any way. The case with a 
destructor is just the most reliable way to encounter this bug, not the only 
way.
   
   I'm less sure about this, but I think that chance might not be as small as 
it sounds; it is possible that if the event loop is blocked by something 
(anything), pending futures whose results have not yet been consumed stay in 
the StopIteration-exception-pending state until a routine comes along to check 
on them. If that is the case, then the "coincidence" window where this bug 
could occur is much wider.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


Reply via email to