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.167 by root, Sun May 9 20:49:52 2010 UTC vs.
Revision 1.168 by root, Wed Aug 4 14:02:58 2010 UTC

620 errno = old_errno; 620 errno = old_errno;
621 621
622 mg->mg_obj = 0; /* just in case */ 622 mg->mg_obj = 0; /* just in case */
623 623
624 SvREADONLY_off (sv); 624 SvREADONLY_off (sv);
625
626 if (SvPVX (sv) != mg->mg_ptr)
627 croak ("ERROR: IO::AIO::mmap-mapped scalar changed location, detected");
628
625 SvCUR_set (sv, 0); 629 SvCUR_set (sv, 0);
626 SvLEN_set (sv, 0);
627 SvPVX (sv) = 0; 630 SvPVX (sv) = 0;
628 SvOK_off (sv); 631 SvOK_off (sv);
629 632
630 return 0; 633 return 0;
631} 634}
1386 int fd = SvOK (fh) ? s_fileno_croak (fh, flags & PROT_WRITE) : -1; 1389 int fd = SvOK (fh) ? s_fileno_croak (fh, flags & PROT_WRITE) : -1;
1387 void *addr = (void *)mmap (0, length, prot, flags, fd, offset); 1390 void *addr = (void *)mmap (0, length, prot, flags, fd, offset);
1388 if (addr == (void *)-1) 1391 if (addr == (void *)-1)
1389 XSRETURN_NO; 1392 XSRETURN_NO;
1390 1393
1394 sv_force_normal (scalar);
1395
1391 /* we store the length in mg_obj, as namlen is I32 :/ */ 1396 /* we store the length in mg_obj, as namlen is I32 :/ */
1392 sv_magicext (scalar, 0, MMAP_MAGIC, &mmap_vtbl, (char *)addr, 0) 1397 sv_magicext (scalar, 0, MMAP_MAGIC, &mmap_vtbl, (char *)addr, 0)
1393 ->mg_obj = (SV *)length; 1398 ->mg_obj = (SV *)length;
1394 1399
1395 SvUPGRADE (scalar, SVt_PV); /* nop... */ 1400 SvUPGRADE (scalar, SVt_PV); /* nop... */
1401
1396 if (!(prot & PROT_WRITE)) 1402 if (!(prot & PROT_WRITE))
1397 SvREADONLY_on (scalar); 1403 SvREADONLY_on (scalar);
1404
1405 if (SvLEN (scalar))
1406 Safefree (SvPVX (scalar));
1398 1407
1399 SvPVX (scalar) = (char *)addr; 1408 SvPVX (scalar) = (char *)addr;
1400 SvCUR_set (scalar, length); 1409 SvCUR_set (scalar, length);
1401 SvLEN_set (scalar, 0); 1410 SvLEN_set (scalar, 0);
1402 SvPOK_only (scalar); 1411 SvPOK_only (scalar);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines