Skip to content

Commit 89d14b6

Browse files
committed
fix(Exception): handle exception in worker thread
1 parent 2406eff commit 89d14b6

File tree

13 files changed

+200
-57
lines changed

13 files changed

+200
-57
lines changed

include/geode/basic/assert.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ namespace geode
5151
{
5252
public:
5353
template < typename... Args >
54-
explicit OpenGeodeException( const Args &...message )
54+
explicit OpenGeodeException( const Args&... message )
5555
: std::runtime_error{ absl::StrCat( message... ) }
5656
{
5757
}

include/geode/model/representation/builder/detail/copy.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -145,7 +145,11 @@ namespace geode
145145
} );
146146
count++;
147147
}
148-
async::when_all( tasks.begin(), tasks.end() ).wait();
148+
for( auto& task :
149+
async::when_all( tasks.begin(), tasks.end() ).get() )
150+
{
151+
task.get();
152+
}
149153
return result;
150154
}
151155

src/geode/basic/assert.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,11 +46,11 @@ namespace geode
4646
{
4747
throw;
4848
}
49-
catch( const OpenGeodeException &e )
49+
catch( const OpenGeodeException& e )
5050
{
5151
Logger::critical( "OpenGeodeException: ", e.what() );
5252
}
53-
catch( const std::exception &e )
53+
catch( const std::exception& e )
5454
{
5555
Logger::critical( "std::exception: ", e.what() );
5656
}

src/geode/model/helpers/aabb_model_helpers.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,10 @@ namespace
5757
} );
5858
id++;
5959
}
60-
async::when_all( tasks.begin(), tasks.end() ).wait();
60+
for( auto& task : async::when_all( tasks.begin(), tasks.end() ).get() )
61+
{
62+
task.get();
63+
}
6164
return std::make_tuple(
6265
geode::AABBTree< dimension >{ boxes }, std::move( mapping ) );
6366
}

src/geode/model/helpers/detail/cut_along_internal_lines.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -89,9 +89,8 @@ namespace geode
8989
}
9090
CMVmappings mapping;
9191
async::when_all( tasks.begin(), tasks.end() )
92-
.then( [this, &mapping](
93-
async::task< std::vector< Task > > all_task ) {
94-
for( auto& task : all_task.get() )
92+
.then( [this, &mapping]( std::vector< Task > all_task ) {
93+
for( auto& task : all_task )
9594
{
9695
auto cmv_mappings = task.get();
9796
update_unique_vertices( cmv_mappings );
@@ -100,7 +99,7 @@ namespace geode
10099
std::make_move_iterator( cmv_mappings.end() ) );
101100
}
102101
} )
103-
.wait();
102+
.get();
104103
return mapping;
105104
}
106105

src/geode/model/helpers/detail/cut_along_internal_surfaces.cpp

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -86,9 +86,8 @@ namespace geode
8686
}
8787
CMVmappings mapping;
8888
async::when_all( tasks.begin(), tasks.end() )
89-
.then( [this, &mapping](
90-
async::task< std::vector< Task > > all_task ) {
91-
for( auto& task : all_task.get() )
89+
.then( [this, &mapping]( std::vector< Task > all_task ) {
90+
for( auto& task : all_task )
9291
{
9392
auto cmv_mappings = task.get();
9493
update_unique_vertices( cmv_mappings );
@@ -97,7 +96,7 @@ namespace geode
9796
std::make_move_iterator( cmv_mappings.end() ) );
9897
}
9998
} )
100-
.wait();
99+
.get();
101100
return mapping;
102101
}
103102

src/geode/model/mixin/core/blocks.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,13 @@ namespace geode
126126
}
127127
} );
128128
}
129-
async::when_all( tasks.begin(), tasks.end() )
130-
.then( [level] {
131-
Logger::set_level( level );
132-
} )
133-
.wait();
129+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
130+
all_tasks.wait();
131+
Logger::set_level( level );
132+
for( auto& task : all_tasks.get() )
133+
{
134+
task.get();
135+
}
134136
}
135137

136138
template < index_t dimension >
@@ -168,11 +170,13 @@ namespace geode
168170
}
169171
} );
170172
}
171-
async::when_all( tasks.begin(), tasks.end() )
172-
.then( [level] {
173-
Logger::set_level( level );
174-
} )
175-
.wait();
173+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
174+
all_tasks.wait();
175+
Logger::set_level( level );
176+
for( auto& task : all_tasks.get() )
177+
{
178+
task.get();
179+
}
176180
}
177181

178182
template < index_t dimension >

src/geode/model/mixin/core/corners.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -98,11 +98,13 @@ namespace geode
9898
save_point_set( mesh, file );
9999
} );
100100
}
101-
async::when_all( tasks.begin(), tasks.end() )
102-
.then( [level] {
103-
Logger::set_level( level );
104-
} )
105-
.wait();
101+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
102+
all_tasks.wait();
103+
Logger::set_level( level );
104+
for( auto& task : all_tasks.get() )
105+
{
106+
task.get();
107+
}
106108
}
107109

108110
template < index_t dimension >
@@ -123,11 +125,13 @@ namespace geode
123125
typename Corner< dimension >::CornersKey{} );
124126
} );
125127
}
126-
async::when_all( tasks.begin(), tasks.end() )
127-
.then( [level] {
128-
Logger::set_level( level );
129-
} )
130-
.wait();
128+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
129+
all_tasks.wait();
130+
Logger::set_level( level );
131+
for( auto& task : all_tasks.get() )
132+
{
133+
task.get();
134+
}
131135
}
132136

133137
template < index_t dimension >

src/geode/model/mixin/core/lines.cpp

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -96,11 +96,13 @@ namespace geode
9696
save_edged_curve( mesh, file );
9797
} );
9898
}
99-
async::when_all( tasks.begin(), tasks.end() )
100-
.then( [level] {
101-
Logger::set_level( level );
102-
} )
103-
.wait();
99+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
100+
all_tasks.wait();
101+
Logger::set_level( level );
102+
for( auto& task : all_tasks.get() )
103+
{
104+
task.get();
105+
}
104106
}
105107

106108
template < index_t dimension >
@@ -121,11 +123,13 @@ namespace geode
121123
typename Line< dimension >::LinesKey{} );
122124
} );
123125
}
124-
async::when_all( tasks.begin(), tasks.end() )
125-
.then( [level] {
126-
Logger::set_level( level );
127-
} )
128-
.wait();
126+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
127+
all_tasks.wait();
128+
Logger::set_level( level );
129+
for( auto& task : all_tasks.get() )
130+
{
131+
task.get();
132+
}
129133
}
130134

131135
template < index_t dimension >

src/geode/model/mixin/core/surfaces.cpp

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -116,17 +116,19 @@ namespace geode
116116
}
117117
else
118118
{
119-
throw OpenGeodeException(
120-
"[Surfaces::save_surfaces] Cannot find the explicit "
121-
"SurfaceMesh type" );
119+
throw OpenGeodeException( "[Surfaces::save_surfaces] "
120+
"Cannot find the explicit "
121+
"SurfaceMesh type" );
122122
}
123123
} );
124124
}
125-
async::when_all( tasks.begin(), tasks.end() )
126-
.then( [level] {
127-
Logger::set_level( level );
128-
} )
129-
.wait();
125+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
126+
all_tasks.wait();
127+
Logger::set_level( level );
128+
for( auto& task : all_tasks.get() )
129+
{
130+
task.get();
131+
}
130132
}
131133

132134
template < index_t dimension >
@@ -157,11 +159,13 @@ namespace geode
157159
}
158160
} );
159161
}
160-
async::when_all( tasks.begin(), tasks.end() )
161-
.then( [level] {
162-
Logger::set_level( level );
163-
} )
164-
.wait();
162+
auto all_tasks = async::when_all( tasks.begin(), tasks.end() );
163+
all_tasks.wait();
164+
Logger::set_level( level );
165+
for( auto& task : all_tasks.get() )
166+
{
167+
task.get();
168+
}
165169
}
166170

167171
template < index_t dimension >

0 commit comments

Comments
 (0)