Subject: | Fix building on perl 5.15.3 and up |
Due to a change in the internal representation of POSIX::SigSet's
(necessary because the old one would crash on threaded perls),
POSIX::pselect is currently broken. This patch fixes it.
Regards,
Leon
Subject: | 0002-Build-on-perl-5.15.3-and-up.patch |
From 54e13910be3fb77bbfc620654f998afb1f3a3ab7 Mon Sep 17 00:00:00 2001
From: Leon Timmermans <fawaka@gmail.com>
Date: Fri, 11 May 2012 17:08:38 +0200
Subject: [PATCH 2/2] Build on perl 5.15.3 and up
These have a new POSIX::SigSet representation, that doesn't segfault
threading perls.
---
src/POSIX-pselect.xs | 5 +++++
1 files changed, 5 insertions(+), 0 deletions(-)
diff --git a/src/POSIX-pselect.xs b/src/POSIX-pselect.xs
index 62b31b8..35d6780 100644
--- a/src/POSIX-pselect.xs
+++ b/src/POSIX-pselect.xs
@@ -3,8 +3,13 @@
static void
setup_sigset(pTHX_ sigset_t* const sigmask, SV* const arg) {
SvGETMAGIC(arg);
+#if PERL_VERSION > 15 || PERL_VERSION == 15 && PERL_SUBVERSION > 2
+ if( sv_isobject(arg) && sv_derived_from(arg, "POSIX::SigSet") && SvPOK(SvRV(arg)) ) {
+ *sigmask = *(sigset_t*)SvPV_nolen(SvRV(arg));
+#else
if( sv_isobject(arg) && sv_derived_from(arg, "POSIX::SigSet") && SvIOK(SvRV(arg)) ) {
*sigmask = *(sigset_t*)SvIV( SvRV(arg) );
+#endif
}
else if(SvOK(arg)) {
if(SvROK(arg) && SvTYPE(SvRV(arg)) == SVt_PVAV) {
--
1.7.5.4