View Issue Details

IDProjectCategoryView StatusLast Update
0025896CommunityOCCT:Modeling Algorithmspublic2020-10-01 10:38
ReporterIstvan Csanady Assigned Toabv 
PrioritynormalSeverityminor 
Status closedResolutionfixed 
Target Version7.5.0Fixed in Version7.5.0 
Summary0025896: Modeling Algorithms - UserBreak raising uncatchable exception in boolean operations
DescriptionWhen the parallel flag is true in BOPAlgo_PaveFiller, and the BOPAlgo_Algo::UserBreak() calls are raising Standard_NotImplemented exceptions and the exceptions can not be catched, since they are running from a new thread, and not embedded in try/catch blocks. This prevents the cancellation of boolean operations when running the pave filler parallel.
TagsNo tags attached.
Test case number

Attached Files

  • patch_parallel.diff (1,041 bytes)
  • parallel.diff (4,199 bytes)

Relationships

related to 0025748 closedabv Open CASCADE Foundation Classes - Parallel version of progress indicator 
related to 0030842 closeddenix56 Community C++11 support 
related to 0029935 closedbugmaster Open CASCADE Foundation Classes - introduce OSD_ThreadPool class defining a thread pool 

Activities

msv

2015-04-09 16:49

developer   ~0039512

Dear Istvan, do you work with OCCT compiled with TBB (HAVE_TBB is defined)? I think you do not, because in HAVE_TBB branch the code has try/catch block (see OSD_Parallel.hxx:268). It is just a question, anyway.

Istvan Csanady

2015-04-09 16:51

developer   ~0039513

No, I am not using TBB.

abv

2015-04-09 16:54

manager   ~0039514

Not sure whether it is relevant for this issue, but note that if you use custom signal handlers (e.g. OSD::SetSignal()), on some platforms this works on per-thread basis, thus handlers should be armed separately for each thread.

Istvan Csanady

2015-12-09 17:32

developer   ~0048916

Patch is attached

msv

2015-12-09 17:54

developer   ~0048917

Dear Istvan, the attached patch is relevant not to this bug, but rather to "Do not copy plane if Alt is 0.0 in BRepFill_OffsetWire".

Istvan Csanady

2015-12-09 18:05

developer  

patch_parallel.diff (1,041 bytes)

Istvan Csanady

2015-12-09 18:05

developer   ~0048918

corrected, sorry.

msv

2015-12-11 10:42

developer   ~0049008

The proposed patch is not perfect.

1. It catches exception in the loop by tasks. It means that if user break event takes place the repetitive try/catch will hit on each iteration and the loop will continue till end. It is better to surround the whole loop into try block.

2. It hides all exceptions. I.e. if some exception not connected with user break takes place then the algorithm will continue working with some task left incomplete. This can lead to unpredictable results.

The right way is to implement mechanism that will allow catching exceptions in parallel tasks (i.e. in other threads), stop all other parallel executions (or simply stop scheduling new tasks) and re-throw exception when main thread takes control again. This way is implemented in TBB scheduler.

denix56

2019-08-02 12:43

reporter  

parallel.diff (4,199 bytes)

denix56

2019-08-02 12:45

reporter   ~0085983

I ve uploaded patch that allows to rethrow exceptions from threads. However, it requires C++11

abv

2020-09-23 06:36

manager   ~0095225

I believe exception handling should now (since OCCT 7.4.0) work, due to changes made within #30775. Andrey @akaftasev (or @debix56), can you please check this to confirm?

akaftasev

2020-09-28 17:43

developer   ~0095446

Last edited: 2020-09-28 17:54

I researched the given problem: in the current version, when the parallel flag is true, and the BOPAlgo_Algo::UserBreak() calls, exception can be catched in another threads and execution stops with message like: "Error: The intersection of the arguments has failed" (this message is displayed when the "bop" operation is stopped)
This results were received with using TBB

akaftasev

2020-09-29 13:14

developer   ~0095462

The same result without TBB

Issue History

Date Modified Username Field Change
2015-03-05 16:22 Istvan Csanady New Issue
2015-03-05 16:22 Istvan Csanady Assigned To => msv
2015-03-10 10:28 msv Assigned To msv => azn
2015-03-10 10:28 msv Status new => assigned
2015-04-09 16:49 msv Note Added: 0039512
2015-04-09 16:49 msv Assigned To azn => Istvan Csanady
2015-04-09 16:49 msv Status assigned => feedback
2015-04-09 16:49 msv Target Version 6.9.0 => 7.1.0
2015-04-09 16:51 Istvan Csanady Note Added: 0039513
2015-04-09 16:54 abv Note Added: 0039514
2015-04-09 23:40 msv Assigned To Istvan Csanady => msv
2015-04-09 23:40 msv Status feedback => assigned
2015-12-09 17:32 Istvan Csanady File Added: patch.diff
2015-12-09 17:32 Istvan Csanady Note Added: 0048916
2015-12-09 17:54 msv Note Added: 0048917
2015-12-09 17:54 msv Assigned To msv => Istvan Csanady
2015-12-09 17:54 msv Status assigned => feedback
2015-12-09 18:05 Istvan Csanady File Added: patch_parallel.diff
2015-12-09 18:05 Istvan Csanady Note Added: 0048918
2015-12-09 18:33 msv File Deleted: patch.diff
2015-12-11 10:42 msv Note Added: 0049008
2016-10-26 11:56 msv Target Version 7.1.0 => 7.2.0
2017-07-20 17:13 msv Target Version 7.2.0 => 7.3.0
2018-02-25 21:09 abv Target Version 7.3.0 => 7.4.0
2018-02-25 21:10 abv Assigned To Istvan Csanady => abv
2018-02-25 21:10 abv Status feedback => assigned
2018-07-07 23:09 abv Relationship added related to 0029935
2019-08-02 12:43 denix56 File Added: parallel.diff
2019-08-02 12:45 denix56 Note Added: 0085983
2019-08-12 17:48 msv Target Version 7.4.0 => 7.5.0
2019-09-04 12:22 kgv Summary UserBreak raising uncatchable exception in boolean operations => Modeling Algorithms - UserBreak raising uncatchable exception in boolean operations
2019-09-04 12:22 kgv Relationship added related to 0025748
2019-09-04 12:24 kgv Relationship added related to 0030842
2020-09-15 16:30 msv Target Version 7.5.0 => 7.6.0
2020-09-23 06:34 abv Assigned To abv => akaftasev
2020-09-23 06:36 abv Note Added: 0095225
2020-09-28 17:43 akaftasev Note Added: 0095446
2020-09-28 17:43 akaftasev Note Edited: 0095446
2020-09-28 17:43 akaftasev Assigned To akaftasev => abv
2020-09-28 17:43 akaftasev Status assigned => feedback
2020-09-28 17:54 akaftasev Note Edited: 0095446
2020-09-29 13:14 akaftasev Note Added: 0095462
2020-10-01 10:38 abv Status feedback => closed
2020-10-01 10:38 abv Resolution open => fixed
2020-10-01 10:38 abv Fixed in Version => 7.5.0
2020-10-01 10:38 abv Target Version 7.6.0 => 7.5.0