ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/IO-AIO/AIO.xs
(Generate patch)

Comparing IO-AIO/AIO.xs (file contents):
Revision 1.22 by root, Tue Aug 16 22:22:18 2005 UTC vs.
Revision 1.24 by root, Wed Aug 17 03:01:56 2005 UTC

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
40typedef struct aio_cb { 40typedef struct aio_cb {
41 struct aio_cb *volatile next; 41 struct aio_cb *volatile next;
86static int 86static int
87poll_cb () 87poll_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

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines