Opened 14 years ago

Closed 14 years ago

#184 closed defect (fixed)

Crash on exit when using an embedded window on DIVE mode

Reported by: KO Myung-Hun Owned by:
Priority: major Milestone: Qt 4.6.3
Component: QtGui Version: 4.6.2
Severity: high Keywords:
Cc:

Description

Hi/2.

When using an embedded window on DIVE mode, the following crash occurs on exit.

Killed by SIGSEGV
pid=0x0569 ppid=0x002b tid=0x0001 slot=0x00b9 pri=0x0200 mc=0x0001
G:\APPS\QT4\SMPLAYER\SMPLAYER.EXE
QTCORE4 0:00174652
cs:eip=005b:12ae4652      ss:esp=0053:00a6fba0      ebp=00a6fbd8
 ds=0053      es=0053      fs=150b      gs=0000     efl=00012206
eax=20067d80 ebx=2034cc40 ecx=ffffffff edx=20259f4c edi=00000000 esi=2034cc40
Process dumping was disabled, use DUMPPROC / PROCDUMP to enable it.

Setting QT_PM_NO_DIVE=1 prevents this crash.

Used revision is r801.

Change History (16)

comment:1 by KO Myung-Hun, 14 years ago

Component: GeneralQtGui

comment:2 by Dmitry A. Kuminov, 14 years ago

Can you provide a stack trace please?

comment:3 by Dmitry A. Kuminov, 14 years ago

Smells like an attempt to access an already destroyed object at termination. I recall that I fixed one such bug near the DIVE code already...

comment:4 by KO Myung-Hun, 14 years ago

Do you mean 'Call stack' ?

And, at a glance, the management of 'subWidgets' seems to be a problem.

comment:5 by Dmitry A. Kuminov, 14 years ago

Yes, of course I mean the call stack trace.

Can you also attach your smplayer.exe/mplayer.exe so that I could try to reproduce it locally?

comment:6 by Silvan Scherrer, 14 years ago

Milestone: Qt EnhancedQt 4.6.3

comment:8 by Dmitry A. Kuminov, 14 years ago

No crashes here, SNAP 5.0.5, all kinds of QT_PM_DIVE.

Could you please also try it with the libraries from qqqttt803.zip (#185)?

comment:9 by KO Myung-Hun, 14 years ago

Did you check the output of stdout and stderr ?

You should redirect stdout and stderr to see the crash report.

As you know,

smplayer > crash.log 2>&1

However, unfortunately, I cannot test your testcase libraries because my OS/2 machine has been broken down, maybe due to power failure. After fixing it, I'll test if you cannot still reproduce it.

comment:10 by KO Myung-Hun, 14 years ago

I've downloaded and tested. But the crash still occurs.

Killed by SIGSEGV
pid=0x00c1 ppid=0x0028 tid=0x0001 slot=0x009e pri=0x0200 mc=0x0001
G:\APPS\QT4\SMPLAYER\SMPLAYER.EXE
QTCORE4 0:00176002
cs:eip=005b:1d476002      ss:esp=0053:00a6fba0      ebp=00a6fbd8
 ds=0053      es=0053      fs=150b      gs=0000     efl=00012206
eax=20067fc0 ebx=203235c0 ecx=ffffffff edx=2026ae0c edi=00000000 esi=203235c0
Process dumping was disabled, use DUMPPROC / PROCDUMP to enable it.

comment:11 by Silvan Scherrer, 14 years ago

ok we can reproduce it now :) me must have been blind before

comment:12 by Dmitry A. Kuminov, 14 years ago

The destructor of QPMDiveWindowSurface accessed already deleted children of the main widget (because children get deleted in the QWidget destructor before QWidget::destroy(), which calls the QWindowSurface destructor, is called). It was actually a regression after r775 (which looks like a typo -- I removed QEvent::Destroy for no sake) that fixed another crash I mentioned above.

Next, I found that there is no need to use HWND as the key any more, with QWidget the code looks a bit nicer and doesn't introduce the problem r775 fixed in the first place (HWND was necessary in some old incarnation of the code which I improved a lot since then). Therefore I also rolled back r775 (partly).

Anyway, please check r808.

comment:13 by Silvan Scherrer, 14 years ago

i checked and for me it works now. i can't find any crashreport

comment:14 by rudi, 14 years ago

With r808 I get compiler warning, that "cmplx" might be uninitialized in qt_WinProcessWindowObstacles(). Please check.

comment:15 by KO Myung-Hun, 14 years ago

Ok, there is no crash any more.

Thanks.

comment:16 by Dmitry A. Kuminov, 14 years ago

Resolution: fixed
Status: newclosed

Okay, thanks to all. Rudi, the warning is fixed too.

Note: See TracTickets for help on using tickets.