Professional UI Solutions
Site Map   /  Register
 
 

Forum

Please Log In to post a new message or reply to an existing one. If you are not registered, please register.

NOTE: Some forums may be read-only if you are not currently subscribed to our technical support services.

Forums » Prof-UIS Tech Support » Crash on exit (CExtComboBox) 2nd Collapse All
Subject Author Date
Dominik Braendlin Jun 1, 2011 - 6:18 AM

Dear TechSupport,

I recently started testing my application using the Application Verifier 4.1.1078. Under Tests I use all the Basics and the Misc Options.

Running these tests I came across a very old problem with the CExtComboBox. I sometimes had crashes while exiting a dialog in which I have changed the content of the cextcombobox.

I have found a similar case in your support database:

http://www.prof-uis.com/prof-uis/tech-support/support-forum/crash-on-exit-cextcombobox-67580.aspx#@lt;/div>
I have included the Output from the Visual Studio 2008 plus the calling stack. I am using ProfUIS 2.91 Unicode with dynamic MFC.

Any suggestion?

Thanks Adrian

 

Warning: no message line prompt for ID 0x2367.

Warning: no message line prompt for ID 0x1F71.

Warning: no message line prompt for ID 0x1F71.

First-chance exception at 0x012f2efc in Easyscan2.exe: 0xC0000005: Access violation reading location 0x19223fa0.

 

 

===========================================================

VERIFIER STOP 0000000000000013: pid 0x12FC: first chance access violation for current stack trace

 

       0000000019223FA0 : Invalid address being accessed

       00000000012F2EFC : Code performing invalid access

       000000000008B4D0 : Exception record. Use .exr to display it.

       000000000008AFE0 : Context record. Use .cxr to display it.

===========================================================

This verifier stop is continuable.

After debugging it use `go’ to continue.

===========================================================

 

 

 

=======================================

VERIFIER STOP 00000013: pid 0x12FC: First chance access violation for current stack trace.

 

       19223FA0 : Invalid address causing the exception.

       012F2EFC : Code address executing the invalid access.

       0018CCB8 : Exception record.

       0018CD08 : Context record.

 

 

=======================================

This verifier stop is continuable.

After debugging it use `go’ to continue.

 

=======================================

 

Easyscan2.exe has triggered a breakpoint

 

 

Calling stack

 

      vrfcore.dll!VerifierStopMessageEx(_AVRF_LAYER_DESCRIPTOR * LayerDescriptor=0x6f84c540, unsigned long StopCode=19, unsigned long Param1=421674912, unsigned long Param2=19869436, unsigned long Param3=1625272, unsigned long Param4=1625352, _AVRF_STOP_EXTRA * StopExtra=0x00000000, ...) Line 570     C++

      vrfcore.dll!VfCoreRedirectedStopMessage(unsigned long Code=19, char * Message=0x61c11bdc, unsigned long Param1=421674912, char * Description1=0x61c11c14, unsigned long Param2=19869436, char * Description2=0x61c11c34, unsigned long Param3=1625272, char * Description3=0x61c11c54, unsigned long Param4=1625352, char * Description4=0x61c11c80) Line 103 + 0x19 bytes C++

      vfbasics.dll!VerifierStopMessage(unsigned long Code=19, char * Message=0x61c11bdc, unsigned long Param1=421674912, char * Description1=0x61c11c14, unsigned long Param2=19869436, char * Description2=0x61c11c34, unsigned long Param3=1625272, char * Description3=0x61c11c54, unsigned long Param4=1625352, char * Description4=0x61c11c80) Line 1309 C

      vfbasics.dll!AVrfpCheckFirstChanceException(_EXCEPTION_POINTERS * ExceptionPointers=0x0018cc00) Line 1151 + 0x2b bytes      C

      vfbasics.dll!AVrfpVectoredExceptionHandler(_EXCEPTION_POINTERS * ExceptionPointers=0x0018cc00) Line 354 C

      ntdll.dll!_RtlpCallVectoredHandlers@12() + 0x2f244 bytes 

      ntdll.dll!_RtlCallVectoredExceptionHandlers@8() + 0x12 bytes   

      ntdll.dll!_RtlDispatchException@8() + 0x19 bytes   

      ntdll.dll!_KiUserExceptionDispatcher@8() + 0xf bytes     

>     Easyscan2.exe!CExtComboBoxPopupListBox::WindowProc(unsigned int message=130, unsigned int wParam=0, long lParam=0) Line 269 + 0x26 bytes C++

      Easyscan2.exe!CExtNCSB_Impl<CExtComboBoxPopupListBox>::WindowProc(unsigned int message=130, unsigned int wParam=0, long lParam=0) Line 1181 + 0x14 bytes C++

      mfc90ud.dll!AfxCallWndProc(CWnd * pWnd=0x19223f48, HWND__ * hWnd=0x002f11a8, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 240 + 0x1c bytes C++

      mfc90ud.dll!AfxWndProc(HWND__ * hWnd=0x002f11a8, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 403 C++

      mfc90ud.dll!AfxWndProcBase(HWND__ * hWnd=0x002f11a8, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 441 + 0x15 bytes C++

      user32.dll!_InternalCallWinProc@20() + 0x23 bytes  

      user32.dll!_UserCallWinProcCheckWow@32() + 0x693 bytes   

      user32.dll!_DispatchClientMessage@24() + 0x51 bytes

      user32.dll!___fnNCDESTROY@4() + 0x2d bytes   

      ntdll.dll!_KiUserCallbackDispatcher@12() + 0x2e bytes    

      user32.dll!_NtUserDestroyWindow@4() + 0x15 bytes   

      comctl32.dll!ComboBox_NcDestroyHandler() + 0x32 bytes    

      comctl32.dll!ComboBox_WndProc() + 0x131 bytes

      user32.dll!_InternalCallWinProc@20() + 0x23 bytes  

      user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes    

      user32.dll!_CallWindowProcAorW@24() + 0x5e bytes   

      user32.dll!_CallWindowProcW@20() + 0x1b bytes

      mfc90ud.dll!CWnd::DefWindowProcW(unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 1043 + 0x20 bytes C++

      mfc90ud.dll!CWnd::Default() Line 274    C++

      mfc90ud.dll!CWnd::OnNcDestroy() Line 853      C++

      mfc90ud.dll!CWnd::OnWndMsg(unsigned int message=130, unsigned int wParam=0, long lParam=0, long * pResult=0x0018da94) Line 2042      C++

      mfc90ud.dll!CWnd::WindowProc(unsigned int message=130, unsigned int wParam=0, long lParam=0) Line 1755 + 0x20 bytes C++

      Easyscan2.exe!CExtComboBoxBase::WindowProc(unsigned int message=130, unsigned int wParam=0, long lParam=0) Line 2858 C++

      Easyscan2.exe!CExtComboBox::WindowProc(unsigned int message=130, unsigned int wParam=0, long lParam=0) Line 4209    C++

      mfc90ud.dll!AfxCallWndProc(CWnd * pWnd=0x1a067480, HWND__ * hWnd=0x003c0c3c, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 240 + 0x1c bytes C++

      mfc90ud.dll!AfxWndProc(HWND__ * hWnd=0x003c0c3c, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 403 C++

      mfc90ud.dll!AfxWndProcBase(HWND__ * hWnd=0x003c0c3c, unsigned int nMsg=130, unsigned int wParam=0, long lParam=0) Line 441 + 0x15 bytes C++

      user32.dll!_InternalCallWinProc@20() + 0x23 bytes  

      user32.dll!_UserCallWinProcCheckWow@32() + 0x693 bytes   

      user32.dll!_DispatchClientMessage@24() + 0x51 bytes

      user32.dll!___fnNCDESTROY@4() + 0x2d bytes   

      ntdll.dll!_KiUserCallbackDispatcher@12() + 0x2e bytes    

      user32.dll!_NtUserDestroyWindow@4() + 0x15 bytes   

      mfc90ud.dll!CWnd::DestroyWindow() Line 1007 + 0xd bytes   C++

      Easyscan2.exe!CMoreButtonDlg::OnOK() Line 261 + 0xf bytes C++

      mfc90ud.dll!_AfxDispatchCmdMsg(CCmdTarget * pTarget=0x18b51de8, unsigned int nID=1, int nCode=0, void (void)* pfn=0x52bb91e0, void * pExtra=0x00000000, unsigned int nSig=57, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000) Line 82     C++

      mfc90ud.dll!CCmdTarget::OnCmdMsg(unsigned int nID=1, int nCode=0, void * pExtra=0x00000000, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000) Line 381 + 0x27 bytes C++

      mfc90ud.dll!CDialog::OnCmdMsg(unsigned int nID=1, int nCode=0, void * pExtra=0x00000000, AFX_CMDHANDLERINFO * pHandlerInfo=0x00000000) Line 85 + 0x18 bytes C++

      mfc90ud.dll!CWnd::OnCommand(unsigned int wParam=1, long lParam=1314822) Line 2364 C++

      mfc90ud.dll!CWnd::OnWndMsg(unsigned int message=273, unsigned int wParam=1, long lParam=1314822, long * pResult=0x0018e444) Line 1769 + 0x1e bytes     C++

      mfc90ud.dll!CWnd::WindowProc(unsigned int message=273, unsigned int wParam=1, long lParam=1314822) Line 1755 + 0x20 bytes C++

      Easyscan2.exe!CExtWS<CExtADLG<CExtResDlg>,301>::WindowProc(unsigned int message=273, unsigned int wParam=1, long lParam=1314822) Line 778      C++

      Easyscan2.exe!CExtWA<CExtWS<CExtADLG<CExtResDlg>,301> >::WindowProc(unsigned int message=273, unsigned int wParam=1, long lParam=1314822) Line 1214 + 0x14 bytes C++

      Easyscan2.exe!CExtResizableDialog::WindowProc(unsigned int message=273, unsigned int wParam=1, long lParam=1314822) Line 390 + 0x14 bytes      C++

      mfc90ud.dll!AfxCallWndProc(CWnd * pWnd=0x18b51de8, HWND__ * hWnd=0x002f03ba, unsigned int nMsg=273, unsigned int wParam=1, long lParam=1314822) Line 240 + 0x1c bytes C++

      mfc90ud.dll!AfxWndProc(HWND__ * hWnd=0x002f03ba, unsigned int nMsg=273, unsigned int wParam=1, long lParam=1314822) Line 403 C++

      mfc90ud.dll!AfxWndProcBase(HWND__ * hWnd=0x002f03ba, unsigned int nMsg=273, unsigned int wParam=1, long lParam=1314822) Line 441 + 0x15 bytes C++

      user32.dll!_InternalCallWinProc@20() + 0x23 bytes  

      user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes    

      user32.dll!_DispatchClientMessage@24() + 0x51 bytes

      user32.dll!___fnDWORD@4() + 0x2b bytes 

      ntdll.dll!_KiUserCallbackDispatcher@12() + 0x2e bytes    

      user32.dll!_NtUserMessageCall@28() + 0x15 bytes    

      user32.dll!_SendMessageWorker@24() + 0x8c15 bytes  

      user32.dll!_SendMessageW@16() + 0x4c bytes   

      mfc90ud.dll!CWnd::SendMessageW(unsigned int message=273, unsigned int wParam=1, long lParam=1314822) Line 42 + 0x44 bytes    C++

      Easyscan2.exe!CExtButton::_OnClick(bool bSelectAny=false, bool bSeparatedDropDownClicked=false) Line 1859    C++

      Easyscan2.exe!CExtButton::OnLButtonUp(unsigned int nFlags=0, CPoint point={...}) Line 1803 + 0x48 bytes C++

      mfc90ud.dll!CWnd::OnWndMsg(unsigned int message=514, unsigned int wParam=0, long lParam=983072, long * pResult=0x0018f570) Line 2183 C++

      mfc90ud.dll!CWnd::WindowProc(unsigned int message=514, unsigned int wParam=0, long lParam=983072) Line 1755 + 0x20 bytes   C++

      Easyscan2.exe!CExtButton::WindowProc(unsigned int message=514, unsigned int wParam=0, long lParam=983072) Line 2952 + 0x14 bytes    C++

      mfc90ud.dll!AfxCallWndProc(CWnd * pWnd=0x14040de8, HWND__ * hWnd=0x00141006, unsigned int nMsg=514, unsigned int wParam=0, long lParam=983072) Line 240 + 0x1c bytes   C++

      mfc90ud.dll!AfxWndProc(HWND__ * hWnd=0x00141006, unsigned int nMsg=514, unsigned int wParam=0, long lParam=983072) Line 403 C++

      mfc90ud.dll!AfxWndProcBase(HWND__ * hWnd=0x00141006, unsigned int nMsg=514, unsigned int wParam=0, long lParam=983072) Line 441 + 0x15 bytes   C++

      user32.dll!_InternalCallWinProc@20() + 0x23 bytes  

      user32.dll!_UserCallWinProcCheckWow@32() + 0xb7 bytes    

      user32.dll!_DispatchMessageWorker@8() + 0xed bytes 

      user32.dll!_DispatchMessageW@4() + 0xf bytes 

      user32.dll!_IsDialogMessageW@8() + 0x11e bytes     

      mfc90ud.dll!CWnd::IsDialogMessageW(tagMSG * lpMsg=0x09942ec8) Line 198     C++

      mfc90ud.dll!CWnd::PreTranslateInput(tagMSG * lpMsg=0x09942ec8) Line 4332   C++

      mfc90ud.dll!CDialog::PreTranslateMessage(tagMSG * pMsg=0x09942ec8) Line 80 C++

      Easyscan2.exe!CExtWS<CExtADLG<CExtResDlg>,301>::PreTranslateMessage(tagMSG * pMsg=0x09942ec8) Line 425   C++

      Easyscan2.exe!CExtResizableDialog::PreTranslateMessage(tagMSG * pMsg=0x09942ec8) Line 611   C++

      mfc90ud.dll!CWnd::WalkPreTranslateTree(HWND__ * hWndStop=0x0010160c, tagMSG * pMsg=0x09942ec8) Line 2946 + 0x14 bytes C++

      mfc90ud.dll!AfxInternalPreTranslateMessage(tagMSG * pMsg=0x09942ec8) Line 233 + 0x12 bytes C++

      mfc90ud.dll!CWinThread::PreTranslateMessage(tagMSG * pMsg=0x09942ec8) Line 777 + 0x9 bytes C++

      Easyscan2.exe!CMobileApp::PreTranslateMessage(tagMSG * pMsg=0x09942ec8) Line 766 C++

      mfc90ud.dll!AfxPreTranslateMessage(tagMSG * pMsg=0x09942ec8) Line 252 + 0x11 bytes      C++

      mfc90ud.dll!AfxInternalPumpMessage() Line 178 + 0x18 bytes      C++

      mfc90ud.dll!CWinThread::PumpMessage() Line 900      C++

      mfc90ud.dll!CWinThread::Run() Line 629 + 0xd bytes C++

      mfc90ud.dll!CWinApp::Run() Line 887     C++

      mfc90ud.dll!AfxWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x076ebec6, int nCmdShow=1) Line 47 + 0xd bytes C++

      Easyscan2.exe!wWinMain(HINSTANCE__ * hInstance=0x00400000, HINSTANCE__ * hPrevInstance=0x00000000, wchar_t * lpCmdLine=0x076ebec6, int nCmdShow=1) Line 34 C++

      Easyscan2.exe!__tmainCRTStartup() Line 578 + 0x35 bytes   C

      Easyscan2.exe!wWinMainCRTStartup() Line 403   C

      kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes

      ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes   

      ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes    

Technical Support Jun 1, 2011 - 1:40 PM

Soory but we need some detailed description of how to reproduce this.

Dominik Braendlin Jun 1, 2011 - 4:44 PM

I have sent you an email.

Dominik Braendlin Jun 1, 2011 - 4:44 PM

I have sent you an email.

Technical Support Jun 2, 2011 - 1:06 PM

Thank you for helping use to reproduce the rarely crashing issue in combo box control. To fix it, please update the source code for the following method:

LRESULT CExtComboBoxPopupListBox::WindowProc( UINT message, WPARAM wParam, LPARAM lParam )
{
    if( m_pCB != NULL && m_hWndCB != NULL && ::IsWindow( m_hWndCB ) )
    {
        LRESULT lResult = 0L;
        if( m_pCB->_OnCbLbPreWndProc( lResult, message, wParam, lParam ) )
            return lResult;
    }
    switch( message )
    {
    case WM_NCCALCSIZE:
        if( m_bSimpleModeComboBox)
        {
            NCCALCSIZE_PARAMS * myNCSIZE = (NCCALCSIZE_PARAMS*)lParam;
            CRect rcSaved = myNCSIZE->rgrc[0];
            LRESULT lResult = CWnd::WindowProc( message, wParam, lParam );
            //myNCSIZE->rgrc[0].left = rcSaved.left;
            myNCSIZE->rgrc[0].top = rcSaved.top;
            myNCSIZE->rgrc[0].bottom = rcSaved.bottom;
            myNCSIZE->rgrc[0].right ++;
            return lResult;
        }
    break;
    case (WM_USER+555):
        MoveWindow( &m_rcWndRestore );
    return 0L;
    case WM_PRINT:
    case WM_PRINTCLIENT:
        if( m_bFirstActivationInvocation )
        {
            m_bFirstActivationInvocation = false;
            if( ! m_bSimpleModeComboBox )
            {
                GetWindowRect( &m_rcWndRestore );
                MoveWindow( -32000, -32000, 0, 0 );
                PostMessage( (WM_USER+555) );
            }
        }
        if( ! m_bSimpleModeComboBox )
            return 0L;
    break;
    case WM_ERASEBKGND:
    if(     (GetStyle() & LBS_OWNERDRAWFIXED) != 0 
        ||    (GetStyle() & LBS_OWNERDRAWVARIABLE) != 0 
        )
        return TRUE;
    break;
    case WM_PAINT:
    if(     (GetStyle() & LBS_OWNERDRAWFIXED) != 0 
        ||    (GetStyle() & LBS_OWNERDRAWVARIABLE) != 0 
        )
    {
        CPaintDC dcPaint( this );
        CRect rcClient;
        GetClientRect( &rcClient );
        CExtMemoryDC dc( &dcPaint, &rcClient );
        if( m_pCB != NULL && m_hWndCB != NULL && ::IsWindow( m_hWndCB ) )
        {
            CExtPaintManager * pPM = m_pCB->PmBridge_GetPM();
            ASSERT_VALID( pPM );
            dc.FillSolidRect( &rcClient, pPM->GetColor( COLOR_WINDOW, this ) );
            HFONT hFont = m_pCB->OnQueryFont();
            if( hFont == NULL )
                hFont = (HFONT)pPM->m_FontNormal.GetSafeHandle();
            ASSERT( hFont != NULL );
            HFONT hOldFont = (HFONT)::SelectObject( dc.m_hDC, hFont );
            INT nCount = m_pCB->GetCount();
            INT nTopIndex = ((CListBox*)this)->GetTopIndex();
            for( INT nItem = nTopIndex; nItem < nCount; nItem++ )
            {
                DRAWITEMSTRUCT dis;
                ::memset( &dis, 0, sizeof( DRAWITEMSTRUCT ) );
                dis.CtlType = ODT_LISTBOX;
                dis.CtlID = GetDlgCtrlID();
                dis.itemID = nItem;
                dis.hDC = dc.GetSafeHdc();
                ((CListBox*)this)->GetItemRect( nItem, &dis.rcItem );
                dis.itemAction = ODA_DRAWENTIRE;
                dis.hwndItem = GetSafeHwnd();
                dis.itemData = m_pCB->GetItemData( nItem );
                if( rcClient.bottom < dis.rcItem.top )
                    break;
                if( ((CListBox*)this)->GetSel( nItem ) > 0 )
                    dis.itemState |= ODS_SELECTED;
                if( ((CListBox*)this)->GetCurSel() == nItem )
                    dis.itemState |= ODS_FOCUS;
                m_pCB->SendMessage( WM_DRAWITEM, (WPARAM)GetDlgCtrlID(), (LPARAM)&dis );
            }
            ::SelectObject( dc.m_hDC, hOldFont );
        }
        return TRUE;
    }
    break;
    } // switch( message )
HWND hWndCB = m_hWndCB, hWndOwn = m_hWnd;
CWnd * pThis = this;
LRESULT lResult = CWnd::WindowProc( message, wParam, lParam );
    if( ! ( hWndOwn != NULL && ::IsWindow( hWndOwn ) && CWnd::FromHandlePermanent(hWndOwn) == pThis ) )
        return lResult;
    if( hWndCB != NULL && ::IsWindow( hWndCB ) && m_pCB != NULL && LPVOID(CWnd::FromHandlePermanent(hWndCB)) == LPVOID(m_pCB) )
        m_pCB->_OnCbLbPostWndProc( lResult, message, wParam, lParam );
LONG nFrame = RDW_FRAME;
    switch( message )
    {
    case WM_VSCROLL:
    case WM_HSCROLL:
        nFrame = 0L;
    case WM_SHOWWINDOW:
    case WM_WINDOWPOSCHANGED:
        RedrawWindow(
            NULL,
            NULL,
            RDW_INVALIDATE|RDW_UPDATENOW|RDW_ERASE|RDW_ERASENOW|nFrame
            );
    break;
    } // switch( message )
    return lResult;
}