stas 2002/08/20 21:46:44
Modified: xs/APR/PerlIO apr_perlio.c
Log:
- IoIFP(io) *must* be always set on the valid io sv, otherwise it'll be
never closed and fh and memory leaked. as i saw from doio.c, the solution
is to simply copy IoOFP.
- add IoTYPE_WRONLY and IoTYPE_RDONLY flags to protect from wrong use
Revision Changes Path
1.22 +5 -1 modperl-2.0/xs/APR/PerlIO/apr_perlio.c
Index: apr_perlio.c
===================================================================
RCS file: /home/cvs/modperl-2.0/xs/APR/PerlIO/apr_perlio.c,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -r1.21 -r1.22
--- apr_perlio.c 21 Aug 2002 04:44:14 -0000 1.21
+++ apr_perlio.c 21 Aug 2002 04:46:44 -0000 1.22
@@ -478,11 +478,15 @@
switch (type) {
case APR_PERLIO_HOOK_WRITE:
- IoOFP(GvIOp(gv)) = pio;
+ /* if IoIFP() is not assigned to it'll be never closed, see
+ * Perl_io_close() */
+ IoIFP(GvIOp(gv)) = IoOFP(GvIOp(gv)) = pio;
IoFLAGS(GvIOp(gv)) |= IOf_FLUSH;
+ IoTYPE(GvIOp(gv)) = IoTYPE_WRONLY;
break;
case APR_PERLIO_HOOK_READ:
IoIFP(GvIOp(gv)) = pio;
+ IoTYPE(GvIOp(gv)) = IoTYPE_RDONLY;
break;
};