annotate foosdk/sdk/foobar2000/SDK/abort_callback.cpp @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #include "foobar2000-sdk-pch.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 #include "abort_callback.h"
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 void abort_callback::check() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 if (is_aborting()) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 throw exception_aborted();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 void abort_callback::sleep(double p_timeout_seconds) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 if (!sleep_ex(p_timeout_seconds)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 throw exception_aborted();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 bool abort_callback::sleep_ex(double p_timeout_seconds) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18 // return true IF NOT SET (timeout), false if set
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 return !pfc::event::g_wait_for(get_abort_event(),p_timeout_seconds);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 bool abort_callback::waitForEvent( pfc::eventHandle_t evtHandle, double timeOut ) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 int status = pfc::event::g_twoEventWait( this->get_abort_event(), evtHandle, timeOut );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 switch(status) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 case 1: throw exception_aborted();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 case 2: return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 case 0: return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 default: uBugCheck();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 bool abort_callback_usehandle::is_aborting() const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 return pfc::event::g_wait_for( get_abort_event(), 0 );
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 bool abort_callback::waitForEvent(pfc::event& evt, double timeOut) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 return waitForEvent(evt.get_handle(), timeOut);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 void abort_callback::waitForEvent(pfc::eventHandle_t evtHandle) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 bool status = waitForEvent(evtHandle, -1); (void)status;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 PFC_ASSERT(status); // should never return false
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 void abort_callback::waitForEvent(pfc::event& evt) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 bool status = waitForEvent(evt, -1); (void)status;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 PFC_ASSERT(status); // should never return false
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 bool abort_callback::waitForEventNoThrow(pfc::eventHandle_t evtHandle) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 int status = pfc::event::g_twoEventWait(this->get_abort_event(), evtHandle, -1);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52 switch (status) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 case 1: return false;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 case 2: return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 default: uBugCheck();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 bool abort_callback::waitForEventNoThrow(pfc::event& evt) const {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 return waitForEventNoThrow(evt.get_handle());
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 abort_callback_dummy noAbort;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 abort_callback_event abort_callback_clone::clone(abort_callback_event arg) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 return pfc::fileHandleDup(arg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 void abort_callback_clone::close(abort_callback_event arg) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 return pfc::fileHandleClose(arg);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74