1: #line 93 "./lpsrc/flx_faio.pak"
2:
3:
4:
5:
6:
7:
8:
9:
10: namespace flx { namespace faio {
11:
12: struct FAIO_EXTERN finote_t
13: {
14: virtual void signal()=0;
15: virtual ~finote_t(){}
16: };
17:
18: class FAIO_EXTERN wakeup_fthread_t : public finote_t
19: {
20: rtl::fthread_t *f;
21: pthread::sleep_queue_t *q;
22: public:
23: wakeup_fthread_t(pthread::sleep_queue_t *q_a, rtl::fthread_t *f_a) : f(f_a), q(q_a) {}
24: void signal () { q->enqueue(f); }
25: };
26:
27:
28: class FAIO_EXTERN flx_driver_request_base {
29: finote_t *fn;
30: virtual bool start_async_op_impl() = 0;
31: public:
32: flx_driver_request_base() : fn(0) {}
33: virtual ~flx_driver_request_base() {}
34:
35:
36: void start_async_op(finote_t *fn_a);
37: void notify_finished();
38: };
39:
40: }}
41:
42:
43:
1: #line 137 "./lpsrc/flx_faio.pak"
2:
3:
4:
5: namespace flx { namespace faio {
6:
7: void flx_driver_request_base:: start_async_op(finote_t *fn_a)
8: {
9:
10: fn = fn_a;
11: bool completed = start_async_op_impl();
12: if(completed)
13: {
14:
15: notify_finished();
16: }
17: else
18: {
19:
20: }
21: }
22:
23: void flx_driver_request_base:: notify_finished()
24: {
25:
26: assert(fn!=0);
27: finote_t *fin = fn;
28: fn=0;
29: fin->signal();
30: delete fin;
31:
32: }
33:
34: }}
35: