… | |
… | |
146 | |
146 | |
147 | errno = req->errorno; |
147 | errno = req->errorno; |
148 | |
148 | |
149 | ENTER; |
149 | ENTER; |
150 | PUSHMARK (SP); |
150 | PUSHMARK (SP); |
|
|
151 | EXTEND (SP, 1); |
151 | |
152 | |
152 | switch (req->type) |
153 | switch (req->type) |
153 | { |
154 | { |
154 | case REQ_READDIR: |
155 | case REQ_READDIR: |
155 | { |
156 | { |
… | |
… | |
170 | } |
171 | } |
171 | |
172 | |
172 | rv = sv_2mortal (newRV_noinc ((SV *)av)); |
173 | rv = sv_2mortal (newRV_noinc ((SV *)av)); |
173 | } |
174 | } |
174 | |
175 | |
175 | XPUSHs (rv); |
176 | PUSHs (rv); |
176 | } |
177 | } |
177 | break; |
178 | break; |
178 | |
179 | |
179 | case REQ_OPEN: |
180 | case REQ_OPEN: |
180 | { |
181 | { |
181 | /* convert fd to fh */ |
182 | /* convert fd to fh */ |
182 | SV *fh; |
183 | SV *fh; |
183 | |
184 | |
184 | XPUSHs (sv_2mortal (newSViv (req->result))); |
185 | PUSHs (sv_2mortal (newSViv (req->result))); |
185 | PUTBACK; |
186 | PUTBACK; |
186 | call_pv ("IO::AIO::_fd2fh", G_SCALAR | G_EVAL); |
187 | call_pv ("IO::AIO::_fd2fh", G_SCALAR | G_EVAL); |
187 | SPAGAIN; |
188 | SPAGAIN; |
188 | |
189 | |
189 | fh = SvREFCNT_inc (POPs); |
190 | fh = SvREFCNT_inc (POPs); |
… | |
… | |
191 | PUSHMARK (SP); |
192 | PUSHMARK (SP); |
192 | XPUSHs (sv_2mortal (fh)); |
193 | XPUSHs (sv_2mortal (fh)); |
193 | } |
194 | } |
194 | break; |
195 | break; |
195 | |
196 | |
|
|
197 | case REQ_GROUP: |
|
|
198 | if (req->data) |
|
|
199 | { |
|
|
200 | int i; |
|
|
201 | AV *av = (AV *)req->data; |
|
|
202 | |
|
|
203 | EXTEND (SP, AvFILL (av) + 1); |
|
|
204 | for (i = 0; i <= AvFILL (av); ++i) |
|
|
205 | PUSHs (*av_fetch (av, i, 0)); |
|
|
206 | } |
|
|
207 | break; |
|
|
208 | |
196 | case REQ_SLEEP: |
209 | case REQ_SLEEP: |
197 | case REQ_GROUP: |
|
|
198 | break; |
210 | break; |
199 | |
211 | |
200 | default: |
212 | default: |
201 | XPUSHs (sv_2mortal (newSViv (req->result))); |
213 | PUSHs (sv_2mortal (newSViv (req->result))); |
202 | break; |
214 | break; |
203 | } |
215 | } |
204 | |
216 | |
205 | |
217 | |
206 | PUTBACK; |
218 | PUTBACK; |
… | |
… | |
1207 | CODE: |
1219 | CODE: |
1208 | RETVAL = nreqs; |
1220 | RETVAL = nreqs; |
1209 | OUTPUT: |
1221 | OUTPUT: |
1210 | RETVAL |
1222 | RETVAL |
1211 | |
1223 | |
|
|
1224 | PROTOTYPES: DISABLE |
|
|
1225 | |
1212 | MODULE = IO::AIO PACKAGE = IO::AIO::REQ |
1226 | MODULE = IO::AIO PACKAGE = IO::AIO::REQ |
1213 | |
1227 | |
1214 | void |
1228 | void |
1215 | cancel (aio_req_ornot req) |
1229 | cancel (aio_req_ornot req) |
1216 | PROTOTYPE: |
1230 | PROTOTYPE: |
… | |
… | |
1219 | |
1233 | |
1220 | MODULE = IO::AIO PACKAGE = IO::AIO::GRP |
1234 | MODULE = IO::AIO PACKAGE = IO::AIO::GRP |
1221 | |
1235 | |
1222 | void |
1236 | void |
1223 | add (aio_req grp, ...) |
1237 | add (aio_req grp, ...) |
1224 | PROTOTYPE: $;@ |
|
|
1225 | PPCODE: |
1238 | PPCODE: |
1226 | { |
1239 | { |
1227 | int i; |
1240 | int i; |
1228 | |
1241 | |
1229 | for (i = 1; i < items; ++i ) |
1242 | for (i = 1; i < items; ++i ) |
… | |
… | |
1243 | req->grp = grp; |
1256 | req->grp = grp; |
1244 | } |
1257 | } |
1245 | } |
1258 | } |
1246 | } |
1259 | } |
1247 | |
1260 | |
|
|
1261 | void |
|
|
1262 | result (aio_req grp, ...) |
|
|
1263 | CODE: |
|
|
1264 | { |
|
|
1265 | int i; |
|
|
1266 | AV *av = newAV (); |
|
|
1267 | |
|
|
1268 | if (grp->data) |
|
|
1269 | SvREFCNT_dec (grp->data); |
|
|
1270 | |
|
|
1271 | for (i = 1; i < items; ++i ) |
|
|
1272 | av_push (av, newSVsv (ST (i))); |
|
|
1273 | |
|
|
1274 | grp->data = (SV *)av; |
|
|
1275 | } |
|
|
1276 | |