Skip to content

Commit 0981b93

Browse files
edwardbrclaude
andcommitted
Refactor comprehensive demos to use coro::sync_wait instead of process_events
Replaced the spawn + process_events polling pattern with cleaner sync_wait approach across all comprehensive demos for consistency and efficiency. Changes: - Refactored demo_task from CORO_TASK(void) to CORO_TASK(bool) - Removed result_flag and completed_flag pointer parameters - Replaced scheduler->spawn() + process_events() loop with coro::sync_wait() - Added explicit scheduler->shutdown() calls to prevent thread leaks Benefits: - Cleaner, more maintainable code (-60 lines, +24 lines) - Consistent pattern across all demos - Proper thread cleanup via shutdown() - More idiomatic coroutine usage Files modified: - demos/comprehensive/src/pointers/shared_ptr_demo.cpp - demos/comprehensive/src/pointers/optimistic_ptr_demo.cpp - demos/comprehensive/src/transport/local_transport_demo.cpp - demos/comprehensive/src/transport/tcp_transport_demo.cpp - demos/comprehensive/src/serialisation/serialisation_demo.cpp Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
1 parent f1a8d4e commit 0981b93

File tree

5 files changed

+37
-70
lines changed

5 files changed

+37
-70
lines changed

demos/comprehensive/src/pointers/optimistic_ptr_demo.cpp

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -268,22 +268,19 @@ namespace comprehensive
268268
CO_RETURN true;
269269
}
270270

271-
CORO_TASK(void)
271+
CORO_TASK(bool)
272272
demo_task(
273273
#ifdef CANOPY_BUILD_COROUTINE
274-
std::shared_ptr<coro::io_scheduler> scheduler,
274+
std::shared_ptr<coro::io_scheduler> scheduler
275275
#endif
276-
bool* result_flag,
277-
bool* completed_flag)
276+
)
278277
{
279278
bool res = CO_AWAIT run_optimistic_ptr_demo(
280279
#ifdef CANOPY_BUILD_COROUTINE
281280
scheduler
282281
#endif
283282
);
284-
*result_flag = res;
285-
*completed_flag = true;
286-
CO_RETURN;
283+
CO_RETURN res;
287284
}
288285

289286
}
@@ -345,15 +342,9 @@ int main()
345342
.execution_strategy = coro::io_scheduler::execution_strategy_t::process_tasks_on_thread_pool
346343
});
347344

348-
bool result = false;
349-
bool completed = false;
345+
bool result = coro::sync_wait(comprehensive::v1::demo_task(scheduler));
350346

351-
scheduler->spawn(comprehensive::v1::demo_task(scheduler, &result, &completed));
352-
353-
while (!completed)
354-
{
355-
scheduler->process_events(std::chrono::milliseconds(1));
356-
}
347+
scheduler->shutdown();
357348

358349
return result ? 0 : 1;
359350
#else

demos/comprehensive/src/pointers/shared_ptr_demo.cpp

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -212,22 +212,19 @@ namespace comprehensive
212212
CO_RETURN true;
213213
}
214214

215-
CORO_TASK(void)
215+
CORO_TASK(bool)
216216
demo_task(
217217
#ifdef CANOPY_BUILD_COROUTINE
218-
std::shared_ptr<coro::io_scheduler> scheduler,
218+
std::shared_ptr<coro::io_scheduler> scheduler
219219
#endif
220-
bool* result_flag,
221-
bool* completed_flag)
220+
)
222221
{
223222
bool res = CO_AWAIT run_shared_ptr_demo(
224223
#ifdef CANOPY_BUILD_COROUTINE
225224
scheduler
226225
#endif
227226
);
228-
*result_flag = res;
229-
*completed_flag = true;
230-
CO_RETURN;
227+
CO_RETURN res;
231228
}
232229

233230
}
@@ -279,15 +276,9 @@ int main()
279276
.execution_strategy = coro::io_scheduler::execution_strategy_t::process_tasks_on_thread_pool
280277
});
281278

282-
bool result = false;
283-
bool completed = false;
279+
bool result = coro::sync_wait(comprehensive::v1::demo_task(scheduler));
284280

285-
scheduler->spawn(comprehensive::v1::demo_task(scheduler, &result, &completed));
286-
287-
while (!completed)
288-
{
289-
scheduler->process_events(std::chrono::milliseconds(1));
290-
}
281+
scheduler->shutdown();
291282

292283
return result ? 0 : 1;
293284
#else

demos/comprehensive/src/serialisation/serialisation_demo.cpp

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -221,22 +221,19 @@ namespace comprehensive
221221
CO_RETURN true;
222222
}
223223

224-
CORO_TASK(void)
224+
CORO_TASK(bool)
225225
demo_task(
226226
#ifdef CANOPY_BUILD_COROUTINE
227-
std::shared_ptr<coro::io_scheduler> scheduler,
227+
std::shared_ptr<coro::io_scheduler> scheduler
228228
#endif
229-
bool* result_flag,
230-
bool* completed_flag)
229+
)
231230
{
232231
bool res = CO_AWAIT run_serialisation_demo(
233232
#ifdef CANOPY_BUILD_COROUTINE
234233
scheduler
235234
#endif
236235
);
237-
*result_flag = res;
238-
*completed_flag = true;
239-
CO_RETURN;
236+
CO_RETURN res;
240237
}
241238
}
242239
}
@@ -285,15 +282,9 @@ int main()
285282
.execution_strategy = coro::io_scheduler::execution_strategy_t::process_tasks_on_thread_pool
286283
});
287284

288-
bool result = false;
289-
bool completed = false;
285+
bool result = coro::sync_wait(comprehensive::v1::demo_task(scheduler));
290286

291-
scheduler->spawn(comprehensive::v1::demo_task(scheduler, &result, &completed));
292-
293-
while (!completed)
294-
{
295-
scheduler->process_events(std::chrono::milliseconds(1));
296-
}
287+
scheduler->shutdown();
297288

298289
return result ? 0 : 1;
299290
#else

demos/comprehensive/src/transport/local_transport_demo.cpp

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -148,22 +148,19 @@ namespace comprehensive
148148
CO_RETURN true;
149149
}
150150

151-
CORO_TASK(void)
151+
CORO_TASK(bool)
152152
demo_task(
153153
#ifdef CANOPY_BUILD_COROUTINE
154-
std::shared_ptr<coro::io_scheduler> scheduler,
154+
std::shared_ptr<coro::io_scheduler> scheduler
155155
#endif
156-
bool* result_flag,
157-
bool* completed_flag)
156+
)
158157
{
159158
bool res = CO_AWAIT run_local_transport_demo(
160159
#ifdef CANOPY_BUILD_COROUTINE
161160
scheduler
162161
#endif
163162
);
164-
*result_flag = res;
165-
*completed_flag = true;
166-
CO_RETURN;
163+
CO_RETURN res;
167164
}
168165
}
169166
}
@@ -214,15 +211,9 @@ int main()
214211
.execution_strategy = coro::io_scheduler::execution_strategy_t::process_tasks_on_thread_pool
215212
});
216213

217-
bool result = false;
218-
bool completed = false;
214+
bool result = coro::sync_wait(comprehensive::v1::demo_task(scheduler));
219215

220-
scheduler->spawn(comprehensive::v1::demo_task(scheduler, &result, &completed));
221-
222-
while (!completed)
223-
{
224-
scheduler->process_events(std::chrono::milliseconds(1));
225-
}
216+
scheduler->shutdown();
226217

227218
return result ? 0 : 1;
228219
#else

demos/comprehensive/src/transport/tcp_transport_demo.cpp

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -277,14 +277,15 @@ int main()
277277
return 1;
278278
#else
279279

280-
auto scheduler = coro::io_scheduler::make_shared(
281-
coro::io_scheduler::options{
282-
.thread_strategy = coro::io_scheduler::thread_strategy_t::spawn,
283-
.pool = coro::thread_pool::options{
284-
.thread_count = std::thread::hardware_concurrency(),
285-
},
286-
.execution_strategy = coro::io_scheduler::execution_strategy_t::process_tasks_on_thread_pool
287-
});
280+
auto scheduler_1 = coro::io_scheduler::make_shared(
281+
coro::io_scheduler::options{.thread_strategy = coro::io_scheduler::thread_strategy_t::spawn,
282+
.pool = coro::thread_pool::options{.thread_count = 4},
283+
.execution_strategy = coro::io_scheduler::execution_strategy_t::process_tasks_on_thread_pool});
284+
285+
auto scheduler_2 = coro::io_scheduler::make_shared(
286+
coro::io_scheduler::options{.thread_strategy = coro::io_scheduler::thread_strategy_t::spawn,
287+
.pool = coro::thread_pool::options{.thread_count = 4},
288+
.execution_strategy = coro::io_scheduler::execution_strategy_t::process_tasks_on_thread_pool});
288289

289290
for (int i = 0; i < 100; i++)
290291
{
@@ -295,11 +296,13 @@ int main()
295296
// this tells that the client has finished so the server can shutdown
296297
rpc::event client_finished;
297298

298-
coro::sync_wait(coro::when_all(comprehensive::v1::run_tcp_server(scheduler, server_ready, client_finished),
299-
comprehensive::v1::run_tcp_client(scheduler, server_ready, client_finished)));
299+
coro::sync_wait(coro::when_all(comprehensive::v1::run_tcp_server(scheduler_1, server_ready, client_finished),
300+
comprehensive::v1::run_tcp_client(scheduler_2, server_ready, client_finished)));
300301
}
301302

302303
print_separator("TCP TRANSPORT DEMO COMPLETED");
304+
scheduler_1->shutdown();
305+
scheduler_2->shutdown();
303306
return 0;
304307
#endif
305308
}

0 commit comments

Comments
 (0)