[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