[libcoro-perl] 03/10: Add patch from Father Chrysostomos to fix compatibility with perl 5.22.

gregor herrmann gregoa at debian.org
Thu May 5 15:49:37 UTC 2016


This is an automated email from the git hooks/post-receive script.

gregoa pushed a commit to branch master
in repository libcoro-perl.

commit 271f4ca7eee81a4d992609e8f6fdf268dfb67532
Author: gregor herrmann <gregoa at debian.org>
Date:   Thu May 5 17:23:38 2016 +0200

    Add patch from Father Chrysostomos to fix compatibility with perl 5.22.
    
    Cf. #787500. Taken from the p5p list.
    
    Unfortunately, this doesn't work for perl 5.24 in experimental.
---
 debian/patches/coro-5.22.patch | 116 +++++++++++++++++++++++++++++++++++++++++
 debian/patches/series          |   1 +
 2 files changed, 117 insertions(+)

diff --git a/debian/patches/coro-5.22.patch b/debian/patches/coro-5.22.patch
new file mode 100644
index 0000000..3019ef0
--- /dev/null
+++ b/debian/patches/coro-5.22.patch
@@ -0,0 +1,116 @@
+Subject: Re: [PATCH] - fix for Coro (was Re: revert MG consting (Coro breakage) for 5.24?)
+ This patch works on an unpatched 5.22.0.
+Message-ID: <86840949-52FC-4F12-A3E2-628EEAAE0C66 at cpan.org>
+Date: Wed, 4 May 2016 15:29:58 -0700
+To: Perl5 Porters <perl5-porters at perl.org>
+From: sprout at cpan.org (Father Chrysostomos)
+Bug-Debian: https://bugs.debian.org/787500
+Bug: https://rt.cpan.org/Public/Bug/Display.html?id=101063
+
+
+--- a/Coro/State.xs
++++ b/Coro/State.xs
+@@ -39,6 +39,10 @@
+ #ifdef PadARRAY
+ # define NEWPADAPI 1
+ # define newPADLIST(var)	(Newz (0, var, 1, PADLIST), Newx (PadlistARRAY (var), 2, PAD *))
++# if PERL_VERSION_ATLEAST(5,22,0) && !PERL_VERSION_ATLEAST(5,24,0)
++#  undef PadlistNAMES
++#  define PadlistNAMES(pl)	*((PADNAMELIST **)PadlistARRAY(pl))
++# endif
+ #else
+ typedef AV PADNAMELIST;
+ # if !PERL_VERSION_ATLEAST(5,8,0)
+@@ -1029,10 +1033,6 @@ coro_rss (pTHX_ struct coro *coro)
+ 
+ /** coroutine stack handling ************************************************/
+ 
+-static int (*orig_sigelem_get) (pTHX_ SV *sv, MAGIC *mg);
+-static int (*orig_sigelem_set) (pTHX_ SV *sv, MAGIC *mg);
+-static int (*orig_sigelem_clr) (pTHX_ SV *sv, MAGIC *mg);
+-
+ /* apparently < 5.8.8 */
+ #ifndef MgPV_nolen_const
+ #define MgPV_nolen_const(mg)    (((((int)(mg)->mg_len)) == HEf_SVKEY) ?   \
+@@ -1074,7 +1074,7 @@ coro_sigelem_get (pTHX_ SV *sv, MAGIC *m
+         }
+     }
+ 
+-  return orig_sigelem_get ? orig_sigelem_get (aTHX_ sv, mg) : 0;
++  return PL_vtbl_sigelem.svt_get ? PL_vtbl_sigelem.svt_get (aTHX_ sv, mg) : 0;
+ }
+ 
+ static int ecb_cold
+@@ -1098,7 +1098,7 @@ coro_sigelem_clr (pTHX_ SV *sv, MAGIC *m
+         }
+     }
+ 
+-  return orig_sigelem_clr ? orig_sigelem_clr (aTHX_ sv, mg) : 0;
++  return PL_vtbl_sigelem.svt_clear ? PL_vtbl_sigelem.svt_clear (aTHX_ sv, mg) : 0;
+ }
+ 
+ static int ecb_cold
+@@ -1122,9 +1122,41 @@ coro_sigelem_set (pTHX_ SV *sv, MAGIC *m
+         }
+     }
+ 
+-  return orig_sigelem_set ? orig_sigelem_set (aTHX_ sv, mg) : 0;
++  return PL_vtbl_sigelem.svt_set ? PL_vtbl_sigelem.svt_set (aTHX_ sv, mg) : 0;
++}
++
++static MGVTBL sigelem_vtbl = {
++    coro_sigelem_get,           /* get */
++    coro_sigelem_set,           /* set */
++    0,                          /* len */
++    coro_sigelem_clr,           /* clear */
++    0,                          /* free */
++    0,                          /* copy */
++    0,                          /* dup */
++#ifdef MGf_LOCAL
++    0,                          /* local */
++#endif
++};
++
++static int ecb_cold
++coro_sig_copy (pTHX_ SV *sv, MAGIC *mg, SV *nsv, const char *key, I32 klen)
++{
++  return sv_magicext (nsv, mg->mg_obj, 'u', &sigelem_vtbl, key, klen);
+ }
+ 
++static MGVTBL sig_vtbl = {
++    0,                          /* get */
++    0,                          /* set */
++    0,                          /* len */
++    0,                          /* clear */
++    0,                          /* free */
++    coro_sig_copy,              /* copy */
++    0,                          /* dup */
++#ifdef MGf_LOCAL
++    0,                          /* local */
++#endif
++};
++
+ static void
+ prepare_nop (pTHX_ struct coro_transfer_args *ta)
+ {
+@@ -3596,15 +3628,16 @@ BOOT:
+         DEFSV;
+         ERRSV;
+ 
++        HV *sig = GvHV (gv_fetchpv ("SIG", GV_ADD|GV_NOTQUAL, SVt_PVHV));
++
++        sv_unmagic ((SV *)sig, PERL_MAGIC_sig);
++        sv_magicext ((SV *)sig, NULL, PERL_MAGIC_uvar, &sig_vtbl, NULL, 0)->mg_flags |= MGf_COPY;
++
+         cctx_current = cctx_new_empty ();
+ 
+         irsgv    = gv_fetchpv ("/"     , GV_ADD|GV_NOTQUAL, SVt_PV);
+         stdoutgv = gv_fetchpv ("STDOUT", GV_ADD|GV_NOTQUAL, SVt_PVIO);
+ 
+-        orig_sigelem_get = PL_vtbl_sigelem.svt_get;   PL_vtbl_sigelem.svt_get   = coro_sigelem_get;
+-        orig_sigelem_set = PL_vtbl_sigelem.svt_set;   PL_vtbl_sigelem.svt_set   = coro_sigelem_set;
+-        orig_sigelem_clr = PL_vtbl_sigelem.svt_clear; PL_vtbl_sigelem.svt_clear = coro_sigelem_clr;
+-
+         rv_diehook  = newRV_inc ((SV *)gv_fetchpv ("Coro::State::diehook" , 0, SVt_PVCV));
+         rv_warnhook = newRV_inc ((SV *)gv_fetchpv ("Coro::State::warnhook", 0, SVt_PVCV));
+ 
diff --git a/debian/patches/series b/debian/patches/series
index 84caea7..8f29ca9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -2,3 +2,4 @@ fix-wrong-path-for-interpreter.patch
 whatis.patch
 spelling.patch
 fix-ftbfs-with-longjmp.patch
+coro-5.22.patch

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-perl/packages/libcoro-perl.git



More information about the Pkg-perl-cvs-commits mailing list