… | |
… | |
103 | struct aio_cb *grp, *grp_prev, *grp_next, *grp_first; |
103 | struct aio_cb *grp, *grp_prev, *grp_next, *grp_first; |
104 | } aio_cb; |
104 | } aio_cb; |
105 | |
105 | |
106 | enum { |
106 | enum { |
107 | FLAG_CANCELLED = 0x01, /* request was cancelled */ |
107 | FLAG_CANCELLED = 0x01, /* request was cancelled */ |
108 | FLAG_SV1_RO_OFF = 0x40, /* data was set readonly */ |
108 | FLAG_SV2_RO_OFF = 0x40, /* data was set readonly */ |
109 | FLAG_PTR2_FREE = 0x80, /* need to free(ptr2) */ |
109 | FLAG_PTR2_FREE = 0x80, /* need to free(ptr2) */ |
110 | }; |
110 | }; |
111 | |
111 | |
112 | typedef aio_cb *aio_req; |
112 | typedef aio_cb *aio_req; |
113 | typedef aio_cb *aio_req_ornot; |
113 | typedef aio_cb *aio_req_ornot; |
… | |
… | |
407 | |
407 | |
408 | static int req_invoke (aio_req req) |
408 | static int req_invoke (aio_req req) |
409 | { |
409 | { |
410 | dSP; |
410 | dSP; |
411 | |
411 | |
412 | if (req->flags & FLAG_SV1_RO_OFF) |
412 | if (req->flags & FLAG_SV2_RO_OFF) |
413 | SvREADONLY_off (req->sv1); |
413 | SvREADONLY_off (req->sv2); |
414 | |
414 | |
415 | if (!(req->flags & FLAG_CANCELLED) && SvOK (req->callback)) |
415 | if (!(req->flags & FLAG_CANCELLED) && SvOK (req->callback)) |
416 | { |
416 | { |
417 | ENTER; |
417 | ENTER; |
418 | SAVETMPS; |
418 | SAVETMPS; |
… | |
… | |
1460 | req->stroffset = dataoffset; |
1460 | req->stroffset = dataoffset; |
1461 | |
1461 | |
1462 | if (!SvREADONLY (data)) |
1462 | if (!SvREADONLY (data)) |
1463 | { |
1463 | { |
1464 | SvREADONLY_on (data); |
1464 | SvREADONLY_on (data); |
1465 | req->flags |= FLAG_SV1_RO_OFF; |
1465 | req->flags |= FLAG_SV2_RO_OFF; |
1466 | } |
1466 | } |
1467 | |
1467 | |
1468 | REQ_SEND; |
1468 | REQ_SEND; |
1469 | } |
1469 | } |
1470 | } |
1470 | } |