[prev in list] [next in list] [prev in thread] [next in thread] 

List:       pykde
Subject:    Re: Crash-on-exit after call to app.processEvents()
From:       Raymond Osborn <rayosborn () mac ! com>
Date:       2020-05-26 3:51:54
Message-ID: EDF66A90-E297-4FCC-8D66-7EC6A9D7BFA0 () mac ! com
[Download RAW message or body]

Armando,
I'm writing again because I've learned a couple of useful things that might be worth \
sharing. I had a scare when the problem started occurring again for no apparent \
reason, using the same sequence I had tested before. I decided to look more closely \
in the debugger and discovered that the exit process never fully completed if one of \
the windows that had been resized following a  processEvents() call was still open. \
Somewhere between the ‘event.accept()' call in the main window's closeEvent \
function and completing the app._exec() call, it just quit, sometimes with a \
segfault, sometimes without. 

The offending windows had all been opened with the main window as parent, but when I \
made them top-level windows, the exit process completed successfully. I had tried \
that already before contacting the mailing list. I think the combination of opening \
the offending windows without a parent and then closing all top-level widgets, as you \
suggested, may have finally fixed the problem. 

Not sure if that's the final word though.

Thanks again,
Ray

> On May 25, 2020, at 5:42 PM, Thomas Caswell <tcaswell@gmail.com> wrote:
> 
> This is reminding me of the issues Armando raised with Matplotlib \
> (https://github.com/matplotlib/matplotlib/issues/14178 \
> <https://github.com/matplotlib/matplotlib/issues/14178> / \
> https://github.com/matplotlib/matplotlib/pull/14179 \
> <https://github.com/matplotlib/matplotlib/pull/14179>).  I now understand why \
> Matplotlib (and IPython) holding references to the qApp can be problematic (as in \
> this case del ing app just drops your reference to it but does not actually trigger \
> the `__delete__` code because other parts of the codebase are keeping it alive) if \
> having a "live" app on process shut down can cause problems. 
> My naive guess as to why calling `ProcessEvents` triggers the issue as that it \
> creates some extra state on at least the c++ side and we end up tearing down the \
> objects on the Python side in a different order than we need to on the c++ side.  \
> Oventually something winds up with a null pointer (because there was a reference at \
> the c++ level but not at the Python level) and boom.  I stress that while that is \
> where I would start looking to track this down it is still very much a guess. 
> Tom
> 
> On Mon, May 25, 2020 at 5:36 PM Raymond Osborn <rayosborn@mac.com \
> <mailto:rayosborn@mac.com>> wrote: Hi Armando,
> Good to hear from you. I thought for a while that I had managed to fix it with the \
> following code : 
> def main(filename=None):
> app = NXConsoleApp()
> app.initialize(filename=filename)
> app.start()
> for w in QApplication.topLevelWindows():
> del w
> del app.window, app.app
> sys.exit(0)
> 
> It proved to be a false dawn - the problem started to recur again. I'll see if your \
> version catches things that mine missed, and let you know. 
> I have spent a lot of time trying to cover up PyQt5 bugs in the past year. The \
> problem is that I can't guarantee that my users will have the latest version of \
> PyQt, so even if it is fixed in v5.14, I still have to patch the code. I just have \
> no idea why simply calling processEvents() triggers the bug. If I knew that, \
> perhaps it would give some clue how to work around it. 
> Ray
> 
> 
> > On May 25, 2020, at 3:38 PM, V. Armando Sole <sole@esrf.fr <mailto:sole@esrf.fr>> \
> > wrote: 
> > Hi Ray,
> > 
> > I do not know if it will help your case. I was getting rid of some crashes on \
> > exit by deleting all widgets that had no parent. For instance, when closing the \
> > QMainWindow by doing: 
> > def closeEvent(self, event):
> > if __name__ == "__main__":
> > app = qt.QApplication.instance()
> > allWidgets = app.allWidgets()
> > for widget in allWidgets:
> > try:
> > # we cannot afford to crash here
> > if id(widget) != id(self):
> > if widget.parent() is None:
> > widget.close()
> > except:
> > _logger.debug("Error closing widget")
> > return qt.QMainWindow.closeEvent(self, event)
> > 
> > Best regards,
> > 
> > Armando
> > 
> > On 25.05.2020 19:48, Raymond Osborn wrote:
> > 
> > > I added a call to QtWidgets.QApplication.instance().processEvents() in order to \
> > > force adjustResize() to work when switching tabs (that's another story). It \
> > > succeeded in fixing my resize issue, but now it triggers a segfault when I exit \
> > > the application. This seemed to be related to the bug described in \
> > > https://www.riverbankcomputing.com/static/Docs/PyQt5/gotchas.html#crashes-on-exit \
> > > <https://www.riverbankcomputing.com/static/Docs/PyQt5/gotchas.html#crashes-on-exit>. \
> > > One fix, suggested by @ekhumoro on stackoverflow \
> > > (https://stackoverflow.com/questions/59120337/why-does-pyqt-sometimes-crash-on-exit \
> > > <https://stackoverflow.com/questions/59120337/why-does-pyqt-sometimes-crash-on-exit>) \
> > > was to delete the main window and the app first, but that doesn't seem to fix \
> > > it. I am running PyQt 5.12 because that is the last version supported by conda, \
> > > so I can't test the one-exit fix in v5.13, and my users probably wouldn't have \
> > > it installed anyway. It happens on Macs and linux. 
> > > What I am asking is if there are additional things to try in addition to \
> > > @ekhumoro's suggestion? Basically he suggests doing something like: 
> > > def main():
> > > app = QApplication(sys.argv)
> > > main_window = MainWindow()
> > > main_window.show()
> > > app.exec_()
> > > # ensure correct deletion order
> > > del main_window, app
> > > Does anyone understand why the crash only occurs if I have calls to \
> > > processEvents() in the code? It never happens when I remove them. 
> > > Thanks,
> > > Ray
> > > 
> > > 
> 
> 
> 
> -- 
> Thomas Caswell
> tcaswell@gmail.com <mailto:tcaswell@gmail.com>


[Attachment #3 (unknown)]

<html><head><meta http-equiv="Content-Type" content="text/html; \
charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; \
line-break: after-white-space;" class=""><div class="">Armando,</div><div \
class="">I'm writing again because I've learned a couple of useful things that might \
be worth sharing. I had a scare when the problem started occurring again for no \
apparent reason, using the same sequence I had tested before. I decided to look more \
closely in the debugger and discovered that the exit process never fully completed if \
one of the windows that had been resized following a &nbsp;processEvents() call was \
still open. Somewhere between the ‘event.accept()' call in the main window's \
closeEvent function and completing the app._exec() call, it just quit, sometimes with \
a segfault, sometimes without.&nbsp;</div><div class=""><br class=""></div><div \
class="">The offending windows had all been opened with the main window as parent, \
but when I made them top-level windows, the exit process completed successfully. I \
had tried that already before contacting the mailing list. I think the combination of \
opening the offending windows without a parent and then closing all top-level \
widgets, as you suggested, may have finally fixed the problem.&nbsp;</div><div \
class=""><br class=""></div><div class="">Not sure if that's the final word \
though.</div><div class=""><br class=""></div><div class="">Thanks again,</div><div \
class="">Ray</div><div class=""><div><br class=""><blockquote type="cite" \
class=""><div class="">On May 25, 2020, at 5:42 PM, Thomas Caswell &lt;<a \
href="mailto:tcaswell@gmail.com" class="">tcaswell@gmail.com</a>&gt; wrote:</div><br \
class="Apple-interchange-newline"><div class=""><div dir="ltr" class="">This is \
reminding me of the issues Armando raised with Matplotlib (<a \
href="https://github.com/matplotlib/matplotlib/issues/14178" \
class="">https://github.com/matplotlib/matplotlib/issues/14178</a>&nbsp;/&nbsp;<a \
href="https://github.com/matplotlib/matplotlib/pull/14179" \
class="">https://github.com/matplotlib/matplotlib/pull/14179</a>).&nbsp; I now \
understand why Matplotlib (and IPython) holding references to the qApp can be \
problematic (as in this case del ing app just drops your reference to it but does not \
actually trigger the `__delete__` code because&nbsp;other parts of the codebase are \
keeping it alive) if having a "live" app on process shut down can cause problems.<div \
class=""><br class=""></div><div class="">My naive guess as to why calling \
`ProcessEvents` triggers the issue as that it creates some extra state on at least \
the c++ side and we end up tearing down the objects on the Python side in a different \
order than we need to on the c++ side.&nbsp; Oventually something winds up with a \
null pointer (because there was a reference at the c++ level but not at the Python \
level) and boom.&nbsp; I stress that while that is where I would start looking to \
track this down it is still very much a guess.<br class=""><div class=""><div \
class=""><br class=""><div class="">Tom</div></div></div></div></div><br \
class=""><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, May 25, \
2020 at 5:36 PM Raymond Osborn &lt;<a href="mailto:rayosborn@mac.com" \
class="">rayosborn@mac.com</a>&gt; wrote:<br class=""></div><blockquote \
class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid \
rgb(204,204,204);padding-left:1ex"><div style="overflow-wrap: break-word;" \
class="">Hi Armando,<div class="">Good to hear from you. I thought for a while that I \
had managed to fix it with the following code :</div><div class=""><br \
class=""></div><div class=""><div class="">&nbsp; &nbsp; def \
main(filename=None):</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; app = \
NXConsoleApp()</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; \
app.initialize(filename=filename)</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; \
app.start()</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; for w in \
QApplication.topLevelWindows():</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \
&nbsp; del w</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; del app.window, \
app.app</div><div class="">&nbsp; &nbsp; &nbsp; &nbsp; sys.exit(0)</div><div \
class=""><br class=""></div><div class="">It proved to be a false dawn - the problem \
started to recur again. I'll see if your version catches things that mine missed, and \
let you know.</div><div class=""><br class=""></div><div class="">I have spent a lot \
of time trying to cover up PyQt5 bugs in the past year. The problem is that I can't \
guarantee that my users will have the latest version of PyQt, so even if it is fixed \
in v5.14, I still have to patch the code. I just have no idea why simply calling \
processEvents() triggers the bug. If I knew that, perhaps it would give some clue how \
to work around it.</div><div class=""><br class=""></div><div class="">Ray</div><div \
class=""><br class=""></div><div class=""><br class=""><blockquote type="cite" \
class=""><div class="">On May 25, 2020, at 3:38 PM, V. Armando Sole &lt;<a \
href="mailto:sole@esrf.fr" target="_blank" class="">sole@esrf.fr</a>&gt; \
wrote:</div><br class=""><div class=""><div \
style="font-size:10pt;font-family:Verdana,Geneva,sans-serif" class=""><p class="">Hi \
Ray,</p><p class="">I do not know if it will help your case. I was getting rid of \
some crashes on exit by deleting all widgets that had no parent. For instance, when \
closing the QMainWindow by doing:</p><p class="">&nbsp;&nbsp;&nbsp; def \
closeEvent(self, event):<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if \
__name__ == "__main__":<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; app = \
qt.QApplication.instance()<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
allWidgets = app.allWidgets()<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for \
widget in allWidgets:<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
try:<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
# we cannot afford to crash here<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if id(widget) != id(self):<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
if widget.parent() is None:<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp \
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
widget.close()<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
except:<br class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; \
_logger.debug("Error closing widget")<br \
class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return \
qt.QMainWindow.closeEvent(self, event)</p><p class="">Best regards,</p><p \
class="">Armando</p><p class="">On 25.05.2020 19:48, Raymond Osborn wrote:</p> \
<blockquote type="cite" style="padding:0px 0.4em;border-left:2px solid \
rgb(16,16,255);margin:0px" class="">I added a call \
to&nbsp;QtWidgets.QApplication.instance().processEvents() in order to force \
adjustResize() to work when switching tabs (that's another story). It succeeded in \
fixing my resize issue, but now it triggers a segfault when I exit the application. \
This seemed to be related to the bug described in&nbsp;<a \
href="https://www.riverbankcomputing.com/static/Docs/PyQt5/gotchas.html#crashes-on-exit" \
target="_blank" class="">https://www.riverbankcomputing.com/static/Docs/PyQt5/gotchas.html#crashes-on-exit</a>. \
One fix, suggested by @ekhumoro on stackoverflow (<a \
href="https://stackoverflow.com/questions/59120337/why-does-pyqt-sometimes-crash-on-exit" \
target="_blank" class="">https://stackoverflow.com/questions/59120337/why-does-pyqt-sometimes-crash-on-exit</a>) \
was to delete the main window and the app first, but that doesn't seem to fix it. I \
am running PyQt 5.12 because that is the last version supported by conda, so I can't \
test the one-exit fix in v5.13, and my users probably wouldn't have it installed \
anyway. It happens on Macs and linux. <div class="">&nbsp;</div>
<div class="">What I am asking is if there are additional things to try in addition \
to @ekhumoro's suggestion? Basically he suggests doing something like:</div> <div \
class="">&nbsp;</div> <div class="">
<pre style="margin-top:0px;margin-bottom:1em;padding:12px \
8px;border:0px;font-family:Consolas,Menlo,Monaco,&quot;Lucida \
Console&quot;,&quot;Liberation Mono&quot;,&quot;DejaVu Sans \
Mono&quot;,&quot;Bitstream Vera Sans Mono&quot;,&quot;Courier \
New&quot;,monospace,sans-serif;font-stretch:inherit;line-height:inherit;font-size:13px \
;vertical-align:baseline;box-sizing:inherit;width:auto;max-height:600px;overflow:auto;border-radius:3px;color:rgb(36,39,41)" \
class=""><code style="margin:0px;padding:0px;border:0px;font-family:Consolas,Menlo,Monaco,&quot;Lucida \
Console&quot;,&quot;Liberation Mono&quot;,&quot;DejaVu Sans \
Mono&quot;,&quot;Bitstream Vera Sans Mono&quot;,&quot;Courier \
New&quot;,monospace,sans-serif;font-style:inherit;font-variant-caps:inherit;font-stret \
ch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit;white-space:inherit" \
class=""><span style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style \
:inherit;font-variant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">def</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class=""> main</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">():</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">  app </span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">=</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class=""> </span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit;color:rgb(43,145,175)" \
class="">QApplication</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">(</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">sys</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">.</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">argv</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">)</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">  main_window </span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">=</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class=""> </span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit;color:rgb(43,145,175)" \
class="">MainWindow</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">()</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">  main_window</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">.</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">show</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">()</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">  app</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">.</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">exec_</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">()</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">  </span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class=""># ensure correct deletion order</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">  </span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">del</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class=""> main_window</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class="">,</span><span \
style="margin:0px;padding:0px;border:0px;font-family:inherit;font-style:inherit;font-v \
ariant-caps:inherit;font-stretch:inherit;line-height:inherit;vertical-align:baseline;box-sizing:inherit" \
class=""> app</span></code></pre> <div class="">Does anyone understand why the crash \
only occurs if I have calls to processEvents() in the code? It never happens when I \
remove them.</div> </div>
<div class="">&nbsp;</div>
<div class="">Thanks,</div>
<div class="">Ray</div>
<div class="">&nbsp;</div>
<div class="">&nbsp;</div>
</blockquote>
</div>
</div></blockquote></div><br class=""></div></div></blockquote></div><br clear="all" \
class=""><div class=""><br class=""></div>-- <br class=""><div dir="ltr" \
class="gmail_signature">Thomas Caswell<br class=""><a \
href="mailto:tcaswell@gmail.com" target="_blank" \
class="">tcaswell@gmail.com</a></div> </div></blockquote></div><br \
class=""></div></body></html>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic