… | |
… | |
31 | REQ_QUIT, |
31 | REQ_QUIT, |
32 | REQ_OPEN, REQ_CLOSE, |
32 | REQ_OPEN, REQ_CLOSE, |
33 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
33 | REQ_READ, REQ_WRITE, REQ_READAHEAD, |
34 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
34 | REQ_STAT, REQ_LSTAT, REQ_FSTAT, |
35 | REQ_FSYNC, REQ_FDATASYNC, |
35 | REQ_FSYNC, REQ_FDATASYNC, |
36 | REQ_UNLINK, REQ_RMDIR, REQ_SYMLINK, |
36 | REQ_UNLINK, REQ_RMDIR, |
37 | REQ_SYMLINK, |
37 | REQ_SYMLINK, |
38 | }; |
38 | }; |
39 | |
39 | |
40 | typedef struct aio_cb { |
40 | typedef struct aio_cb { |
41 | struct aio_cb *volatile next; |
41 | struct aio_cb *volatile next; |
… | |
… | |
86 | static int |
86 | static int |
87 | poll_cb () |
87 | poll_cb () |
88 | { |
88 | { |
89 | dSP; |
89 | dSP; |
90 | int count = 0; |
90 | int count = 0; |
|
|
91 | int do_croak = 0; |
91 | aio_req req, prv; |
92 | aio_req req, prv; |
92 | |
93 | |
93 | pthread_mutex_lock (&reslock); |
94 | pthread_mutex_lock (&reslock); |
94 | |
95 | |
95 | { |
96 | { |
… | |
… | |
158 | PUTBACK; |
159 | PUTBACK; |
159 | call_sv (req->callback, G_VOID | G_EVAL); |
160 | call_sv (req->callback, G_VOID | G_EVAL); |
160 | SPAGAIN; |
161 | SPAGAIN; |
161 | } |
162 | } |
162 | |
163 | |
|
|
164 | do_croak = SvTRUE (ERRSV); |
|
|
165 | |
163 | LEAVE; |
166 | LEAVE; |
164 | |
167 | |
165 | if (req->callback) |
168 | if (req->callback) |
166 | SvREFCNT_dec (req->callback); |
169 | SvREFCNT_dec (req->callback); |
167 | |
170 | |
… | |
… | |
171 | |
174 | |
172 | prv = req; |
175 | prv = req; |
173 | req = req->next; |
176 | req = req->next; |
174 | Safefree (prv); |
177 | Safefree (prv); |
175 | |
178 | |
176 | /* TODO: croak on errors? */ |
179 | if (do_croak) |
|
|
180 | croak (0); |
177 | } |
181 | } |
178 | |
182 | |
179 | return count; |
183 | return count; |
180 | } |
184 | } |
181 | |
185 | |