View Issue Details

IDProjectCategoryView StatusLast Update
0031785Open CASCADEOCCT:Application Frameworkpublic2020-12-02 17:13
Reporterkgv Assigned Tobugmaster  
PriorityhighSeverityblock 
Status closedResolutionfixed 
Product Version7.5.0 
Target Version7.5.0Fixed in Version7.5.0 
Summary0031785: [REGRESSION] Application Framework - application crashes on reading XBF document in background thread
DescriptionExisting multi-threaded application crashes due to NULL dereference after porting to 0029195.
Apparently - either porting notes are missing, or proposed patch is broken.

PCDM_ReaderStatus CDF_Application::CanRetrieve() {
...
    Handle(CDM_MetaData) theMetaData = myMetaDataDriver->MetaData(aFolder,aName,aVersion);

    if(theMetaData->IsRetrieved()) { // << theMetaData is NULL here
Steps To Reproducebugs caf bug31785
TagsNo tags attached.
Test case numberbugs/caf/bug31785

Relationships

has duplicate 0031807 closedbugmaster Community TDocStd_Application::Open (const TCollection_ExtendedString&,...) crash in non-main thread 
child of 0029195 closedabv Open CASCADE OCAF - ensure thread safety for different documents 

Activities

git

2020-09-22 15:22

administrator   ~0095204

Branch CR31785 has been created by mpv.

SHA-1: e2bbb9d2039e572bf09cd6cc8d5bbc7f64324cbe


Detailed log of new commits:

Author: mpv
Date: Tue Sep 22 15:24:54 2020 +0300

    0031785: [REGRESSION] Application Framework - application crashes on reading XBF document in background thread
    
    The porting notes are added.

mpv

2020-09-22 15:23

developer   ~0095205

Updated the upgrade.md porting notes file. No tests needed.

kgv

2020-09-22 15:46

developer   ~0095206

Last edited: 2020-09-22 15:47

- Please integrate the test case with fixed behavior.
- Please add assertion checks / error messages indicating API misuse instead of NULL dereference crashes.
- Please provide more detailed description in Upgrade Guide on how applications following common conception of multi-thread safety (e.g. accessing documents from multiple threads using mutex locks) should be ported (preferably with code sample.)

git

2020-09-23 12:01

administrator   ~0095229

Branch CR31785 has been updated by mpv.

SHA-1: 02207811df1727f57bc21ccded998b4d8f4f3abc


Detailed log of new commits:

Author: mpv
Date: Wed Sep 23 12:04:20 2020 +0300

    # taking into account remarks

git

2020-09-23 12:09

administrator   ~0095230

Branch CR31785 has been updated by mpv.

SHA-1: 2bab77bbe80456b66a5b7a4365bd156cc8b5831e


Detailed log of new commits:

Author: mpv
Date: Wed Sep 23 12:12:33 2020 +0300

    # taking into account remarks

git

2020-09-23 12:37

administrator   ~0095232

Branch CR31785 has been updated by mpv.

SHA-1: 874a38ef63aef0ff7c7ff198a5a20a5502b1e3a5


Detailed log of new commits:

Author: mpv
Date: Wed Sep 23 12:40:01 2020 +0300

    # get rid of warnings

mpv

2020-09-23 15:55

developer   ~0095241

Resolved. Remarks are fixed.

Tests with new case are passed:
http://jenkins-test-12.nnov.opencascade.com/view/CR31785-master-MPV/view/COMPARE/

CR31785-master-MPV-OCCT-Debian80-64-opt-test-compare is failed in "perf ncollection A1", which was not touched by this fix.

kgv

2020-09-23 16:05

developer   ~0095242

Last edited: 2020-09-23 16:06

+In that way, do not create descedants of the *CDF_Application* in one thread and pass it into
+another thread as argument or reuse it in different threads through global variables definition.
+Instead, create a new application instance in each thread.

This does not clarify how existing multi-threaded applications are expected to be ported.
How existing algorithms are expected to be modified?
If creating an Application is a mandatory demand by new API, then CDF_Application should provide a virtual interface "Clone()" implemented in all subclasses, with which algorithm will be able to copy existing application from one thread to another.

Such design limitation looks awkward to me anyway and contradicts to general understanding on how normal objects are expected to be used in multithreaded environment.

+      Message::SendFail() << "Error: no exception produced when accessing application created in another thread";

Please also make a test opening document with success in background thread.

abv

2020-09-23 18:12

manager   ~0095248

Colleagues, I am going to work on this issue to see if "same-thread" limitation is relevant at all, and try to get rid of it

mpv

2020-09-23 18:54

developer   ~0095251

> Please also make a test opening document with success in background thread.

This is already done with multiple parallel threads in test "bugs caf bug29195_1"

git

2020-09-24 15:18

administrator   ~0095269

Branch CR31785 has been updated by abv.

SHA-1: 9e48eda1515abf1f152ed7a8ba948a6ec0012ef2


Detailed log of new commits:

Author: abv
Date: Thu Sep 24 15:21:25 2020 +0300

    CDF_Session is removed, LookUp tables are localized in application instances

git

2020-09-24 18:18

administrator   ~0095282

Branch CR31785 has been updated by abv.

SHA-1: 452cde09a3a9a767afdfe1bf2850e40e1e92776e


Detailed log of new commits:

Author: abv
Date: Thu Sep 24 18:21:40 2020 +0300

    Fix Open()

git

2020-09-24 21:53

administrator   ~0095293

Branch CR31785_1 has been created by abv.

SHA-1: 9f95d07a27be3816835831c2e760c5707a1a55dd


Detailed log of new commits:

Author: mpv
Date: Tue Sep 22 15:24:54 2020 +0300

    0031785: [REGRESSION] Application Framework - application crashes on reading XBF document in background thread
    
    Class CDF_Session is removed.
    
    Integrated previously but not described:
    
    0029195: OCAF - ensure thread safety for different documents.
    
    Static local variables are eliminated in PCDM package.
    Global documents metadata look-up table and directory of opened documents are removed.
    Look-up table is maintained now as field in instances of the CDM_Application class.
    Methods providing iteration by components are removed from class CDF_Store; signature of methods returned Standard_ExtString is changed to return Handle(TCollection_HExtendedString).
    Support of different "Presentations" of documents is eliminated.

abv

2020-09-25 07:31

manager   ~0095298

Updated fix is pushed to CR31785_1 and tested, see Jenkins job CR31785-master-MPV. Note that one test failed, this is apparently false positive (small memory leak) - this test is OK on restart. Please review

git

2020-09-25 09:53

administrator   ~0095300

Branch CR31785_1 has been updated forcibly by kgv.

SHA-1: 7fb84e6a022107447d7a9387eb7ccb6b6db99d14

git

2020-09-25 09:54

administrator   ~0095301

Branch CR31785_1 has been updated forcibly by kgv.

SHA-1: c037161758b57174d6764e64187ab63f42ab03a5

kgv

2020-09-25 09:57

developer   ~0095302

Please raise the patch
- OCCT branch: CR31785_1.

git

2020-09-25 10:07

administrator   ~0095303

Branch CR31785_1 has been updated forcibly by abv.

SHA-1: 888c4c041ebe5f55cbd55d49a26aec40f52454b6

abv

2020-09-25 10:07

manager   ~0095304

Sorry for one more forced push - that was to remove unsed file, not affecting anything else

bugmaster

2020-09-27 14:12

administrator   ~0095368

Combination -
OCCT branch : IR-2020-09-25
master SHA - d7bc5c833ec064bd103ebbff2882146ad5a7e7de
a206de37fbfa0bf71bd534ae47192bbec23b8522
Products branch : IR-2020-09-25 SHA - a8c0c30ba368a2503bbdf9800228ace93993dfff
was compiled on Linux, MacOS and Windows platforms and tested in optimize mode.

Number of compiler warnings:
No new/fixed warnings

Regressions/Differences/Improvements:
No regressions/differences

CPU differences:
Debian80-64:
OCCT
Total CPU difference: 18039.260000000093 / 17637.5100000001 [+2.28%]
Products
Total CPU difference: 12124.200000000114 / 12092.06000000011 [+0.27%]
Windows-64-VC14:
OCCT
Total CPU difference: 19753.9375 / 18982.296875 [+4.07%]
Products
Total CPU difference: 13527.921875 / 13315.40625 [+1.60%]


Image differences :
No differences that require special attention

Memory differences :
No differences that require special attention

git

2020-09-27 14:29

administrator   ~0095378

Branch CR31785_1 has been deleted by inv.

SHA-1: 888c4c041ebe5f55cbd55d49a26aec40f52454b6

git

2020-09-27 14:29

administrator   ~0095381

Branch CR31785 has been deleted by inv.

SHA-1: 452cde09a3a9a767afdfe1bf2850e40e1e92776e

Related Changesets

occt: master 0515f5b3

2020-09-22 12:24:54

abv


Committer: bugmaster Details Diff
0031785: [REGRESSION] Application Framework - application crashes on reading XBF document in background thread

Class CDF_Session is removed.

Integrated previously but not described:
Affected Issues
0031785
mod - dox/dev_guides/upgrade/upgrade.md Diff File
mod - samples/ocafsamples/TDocStd_Sample.cxx Diff File
mod - src/CDF/CDF_Application.cxx Diff File
mod - src/CDF/CDF_Application.hxx Diff File
mod - src/CDF/CDF_DirectoryIterator.cxx Diff File
mod - src/CDF/CDF_FWOSDriver.cxx Diff File
mod - src/CDF/CDF_FWOSDriver.hxx Diff File
mod - src/CDF/CDF_MetaDataDriver.cxx Diff File
mod - src/CDF/CDF_MetaDataDriver.hxx Diff File
rm - src/CDF/CDF_Session.cxx Diff File
rm - src/CDF/CDF_Session.hxx Diff File
mod - src/CDF/CDF_Store.cxx Diff File
mod - src/CDF/CDF_StoreList.cxx Diff File
mod - src/CDF/FILES Diff File
mod - src/CDM/CDM_Application.cxx Diff File
mod - src/CDM/CDM_Application.hxx Diff File
rm - src/CDM/CDM_ApplicationDirectory.hxx Diff File
mod - src/CDM/CDM_Document.cxx Diff File
mod - src/CDM/CDM_MetaData.cxx Diff File
mod - src/CDM/CDM_MetaData.hxx Diff File
mod - src/CDM/FILES Diff File
mod - src/DDocStd/DDocStd.cxx Diff File
mod - src/PCDM/PCDM_ReferenceIterator.cxx Diff File
mod - src/PCDM/PCDM_ReferenceIterator.hxx Diff File
mod - src/QABugs/QABugs_20.cxx Diff File
mod - src/TDocStd/TDocStd_Application.cxx Diff File
mod - src/TDocStd/TDocStd_Application.hxx Diff File
mod - src/TKQADraw/EXTERNLIB Diff File
mod - src/TObj/TObj_Application.cxx Diff File
mod - src/XmlLDrivers/XmlLDrivers_DocumentRetrievalDriver.cxx Diff File
add - tests/bugs/caf/bug31785 Diff File
mod - tools/DFBrowser/DFBrowser_Communicator.cxx Diff File
mod - tools/DFBrowser/DFBrowser_Window.cxx Diff File

occt: master 8a39adb7

2020-09-22 12:24:54

abv


Committer: bugmaster Details Diff
0031785: [REGRESSION] Application Framework - application crashes on reading XBF document in background thread

Class CDF_Session is removed.

Integrated previously but not described:

0029195: OCAF - ensure thread safety for different documents.

Static local variables are eliminated in PCDM package.
Global documents metadata look-up table and directory of opened documents are removed.
Look-up table is maintained now as field in instances of the CDM_Application class.
Methods providing iteration by components are removed from class CDF_Store; signature of methods returned Standard_ExtString is changed to return Handle(TCollection_HExtendedString).
Support of different "Presentations" of documents is eliminated.
Affected Issues
0031785
mod - dox/dev_guides/upgrade/upgrade.md Diff File
mod - samples/ocafsamples/TDocStd_Sample.cxx Diff File
mod - src/CDF/CDF_Application.cxx Diff File
mod - src/CDF/CDF_Application.hxx Diff File
mod - src/CDF/CDF_DirectoryIterator.cxx Diff File
mod - src/CDF/CDF_FWOSDriver.cxx Diff File
mod - src/CDF/CDF_FWOSDriver.hxx Diff File
mod - src/CDF/CDF_MetaDataDriver.cxx Diff File
mod - src/CDF/CDF_MetaDataDriver.hxx Diff File
rm - src/CDF/CDF_Session.cxx Diff File
rm - src/CDF/CDF_Session.hxx Diff File
mod - src/CDF/CDF_Store.cxx Diff File
mod - src/CDF/CDF_StoreList.cxx Diff File
mod - src/CDF/FILES Diff File
mod - src/CDM/CDM_Application.cxx Diff File
mod - src/CDM/CDM_Application.hxx Diff File
rm - src/CDM/CDM_ApplicationDirectory.hxx Diff File
mod - src/CDM/CDM_Document.cxx Diff File
mod - src/CDM/CDM_MetaData.cxx Diff File
mod - src/CDM/CDM_MetaData.hxx Diff File
mod - src/CDM/FILES Diff File
mod - src/DDocStd/DDocStd.cxx Diff File
mod - src/PCDM/PCDM_ReferenceIterator.cxx Diff File
mod - src/PCDM/PCDM_ReferenceIterator.hxx Diff File
mod - src/QABugs/QABugs_20.cxx Diff File
mod - src/TDocStd/TDocStd_Application.cxx Diff File
mod - src/TDocStd/TDocStd_Application.hxx Diff File
mod - src/TKQADraw/EXTERNLIB Diff File
mod - src/TObj/TObj_Application.cxx Diff File
mod - src/XmlLDrivers/XmlLDrivers_DocumentRetrievalDriver.cxx Diff File
add - tests/bugs/caf/bug31785 Diff File
mod - tools/DFBrowser/DFBrowser_Communicator.cxx Diff File
mod - tools/DFBrowser/DFBrowser_Window.cxx Diff File

Issue History

Date Modified Username Field Change
2020-09-21 22:14 kgv New Issue
2020-09-21 22:14 kgv Assigned To => mpv
2020-09-21 22:14 kgv Relationship added child of 0029195
2020-09-21 23:42 kgv Steps to Reproduce Updated
2020-09-22 09:39 kgv Summary Application Framework - application crashes after porting to 0029195 => [REGRESSION] Application Framework - application crashes on reading XBF document in background thread
2020-09-22 09:39 kgv Steps to Reproduce Updated
2020-09-22 09:39 kgv Priority normal => high
2020-09-22 15:22 git Note Added: 0095204
2020-09-22 15:23 mpv Note Added: 0095205
2020-09-22 15:23 mpv Status new => resolved
2020-09-22 15:23 mpv Steps to Reproduce Updated
2020-09-22 15:24 mpv Assigned To mpv => szy
2020-09-22 15:46 kgv Note Added: 0095206
2020-09-22 15:46 kgv Assigned To szy => mpv
2020-09-22 15:46 kgv Status resolved => assigned
2020-09-22 15:47 kgv Note Edited: 0095206
2020-09-23 12:01 git Note Added: 0095229
2020-09-23 12:09 git Note Added: 0095230
2020-09-23 12:37 git Note Added: 0095232
2020-09-23 15:55 mpv Note Added: 0095241
2020-09-23 15:55 mpv Assigned To mpv => kgv
2020-09-23 15:55 mpv Status assigned => resolved
2020-09-23 15:55 mpv Steps to Reproduce Updated
2020-09-23 16:05 kgv Note Added: 0095242
2020-09-23 16:05 kgv Assigned To kgv => mpv
2020-09-23 16:05 kgv Status resolved => assigned
2020-09-23 16:06 kgv Note Edited: 0095242
2020-09-23 18:10 abv Assigned To mpv => abv
2020-09-23 18:12 abv Note Added: 0095248
2020-09-23 18:54 mpv Note Added: 0095251
2020-09-24 15:18 git Note Added: 0095269
2020-09-24 18:18 git Note Added: 0095282
2020-09-24 21:53 git Note Added: 0095293
2020-09-25 07:31 abv Note Added: 0095298
2020-09-25 07:31 abv Assigned To abv => kgv
2020-09-25 07:31 abv Status assigned => resolved
2020-09-25 09:53 git Note Added: 0095300
2020-09-25 09:54 git Note Added: 0095301
2020-09-25 09:57 kgv Note Added: 0095302
2020-09-25 09:57 kgv Assigned To kgv => bugmaster
2020-09-25 09:57 kgv Status resolved => reviewed
2020-09-25 10:07 git Note Added: 0095303
2020-09-25 10:07 abv Note Added: 0095304
2020-09-27 12:16 bugmaster Test case number => bugs/caf/bug31785
2020-09-27 14:12 bugmaster Note Added: 0095368
2020-09-27 14:12 bugmaster Status reviewed => tested
2020-09-27 14:13 bugmaster Changeset attached => occt master 0515f5b3
2020-09-27 14:13 bugmaster Status tested => verified
2020-09-27 14:13 bugmaster Resolution open => fixed
2020-09-27 14:29 git Note Added: 0095378
2020-09-27 14:29 git Note Added: 0095381
2020-09-30 12:36 mpv Relationship added has duplicate 0031807
2020-10-03 14:05 bugmaster Changeset attached => occt master 8a39adb7
2020-12-02 16:44 emo Fixed in Version => 7.5.0
2020-12-02 17:13 emo Status verified => closed