From e91232fd0b23586eaff20f82e252aa4539cb7c1f Mon Sep 17 00:00:00 2001 From: mgb01105731 Date: Wed, 8 Feb 2023 14:15:23 +0800 Subject: [PATCH] remove versioned MODULE_COMPAT_ requires & update to version 1.64 --- perl-threads-shared.spec | 44 ++++- threads-shared-1.59-Upgrade-to-1.60.patch | 110 +++++++++++++ threads-shared-1.59-Upgrade-to-1.61.patch | 57 +++++++ ...-shared-1.60-threads-shared-fix-leak.patch | 57 +++++++ threads-shared-1.61-Upgrade-to-1.62.patch | 48 ++++++ threads-shared-1.62-Upgrade-to-1.64.patch | 154 ++++++++++++++++++ 6 files changed, 463 insertions(+), 7 deletions(-) create mode 100644 threads-shared-1.59-Upgrade-to-1.60.patch create mode 100644 threads-shared-1.59-Upgrade-to-1.61.patch create mode 100644 threads-shared-1.60-threads-shared-fix-leak.patch create mode 100644 threads-shared-1.61-Upgrade-to-1.62.patch create mode 100644 threads-shared-1.62-Upgrade-to-1.64.patch diff --git a/perl-threads-shared.spec b/perl-threads-shared.spec index 744479e..9b03ee9 100644 --- a/perl-threads-shared.spec +++ b/perl-threads-shared.spec @@ -1,12 +1,24 @@ -%define anolis_release 2 +%define anolis_release 1 +%global base_version 1.59 Name: perl-threads-shared -Version: 1.59 +Version: 1.64 Release: %{anolis_release}%{?dist} Summary: Perl extension for sharing data structures between threads -License: GPL+ or Artistic +License: GPL-1.0-or-later OR Artistic-1.0-Perl URL: https://metacpan.org/release/threads-shared -Source0: https://cpan.metacpan.org/authors/id/J/JD/JDHEDDEN/threads-shared-%{version}.tar.gz +Source0: https://cpan.metacpan.org/authors/id/J/JD/JDHEDDEN/threads-shared-%{base_version}.tar.gz +# Unbundled from perl 5.29.10 +Patch0: threads-shared-1.59-Upgrade-to-1.60.patch +# Fix a memory leak when assigning a shared reference to a shared string +# variable, in perl after 5.31.1 +Patch1: threads-shared-1.60-threads-shared-fix-leak.patch +# Unbundled from perl 5.32.0 +Patch2: threads-shared-1.59-Upgrade-to-1.61.patch +# Unbundled from perl 5.34.0 +Patch3: threads-shared-1.61-Upgrade-to-1.62.patch +# Unbundled from perl 5.35.11 +Patch4: threads-shared-1.62-Upgrade-to-1.64.patch BuildRequires: findutils BuildRequires: gcc BuildRequires: make @@ -27,7 +39,6 @@ BuildRequires: perl(File::Path) BuildRequires: perl(Test::More) BuildRequires: perl(POSIX) BuildRequires: perl(Time::HiRes) -Requires: perl(:MODULE_COMPAT_%(eval "`perl -V:version`"; echo $version)) Requires: perl(Carp) Requires: perl(threads) >= 1.73 Requires: perl(XSLoader) @@ -38,8 +49,21 @@ thread gets a private copy of each existing variable. This module allows you to share variables across different threads (and pseudo-forks on Win32). It is used together with the threads module. +%package doc +Summary: Documentation files for %{name} +Requires: %{name} = %{EVR} +BuildArch: noarch + +%description doc +The %{name}-doc package contains documentation files for %{name}. + %prep -%setup -q -n threads-shared-%{version} +%setup -q -n threads-shared-%{base_version} +%patch0 -p1 +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 %build perl Makefile.PL INSTALLDIRS=vendor NO_PACKLIST=1 NO_PERLLOCAL=1 OPTIMIZE="$RPM_OPT_FLAGS" @@ -56,12 +80,18 @@ unset GIT_DIR PERL_BUILD_PACKAGING PERL_CORE PERL_RUNPERL_DEBUG \ make test %files -%doc Changes examples README %{perl_vendorarch}/auto/* %{perl_vendorarch}/threads* %{_mandir}/man3/* +%files doc +%doc Changes examples README + %changelog +* Wed Feb 08 2023 mgb01105731 - 1.64-1 +- remove versioned MODULE_COMPAT_ requires +- update to version 1.64 + * Mon Jan 30 2023 Chunmei Xu - 1.59-2 - rebuild with perl 5.36.0 diff --git a/threads-shared-1.59-Upgrade-to-1.60.patch b/threads-shared-1.59-Upgrade-to-1.60.patch new file mode 100644 index 0000000..df777f9 --- /dev/null +++ b/threads-shared-1.59-Upgrade-to-1.60.patch @@ -0,0 +1,110 @@ +From 2ec58402d05eb12d0b9387963941f1e445d9aa5b Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Fri, 26 Apr 2019 15:00:30 +0200 +Subject: [PATCH] Upgrade to 1.60 + +--- + lib/threads/shared.pm | 4 ++-- + shared.xs | 39 +++++++++++++++++++++++++++++++++++++++ + 2 files changed, 41 insertions(+), 2 deletions(-) + +diff --git a/lib/threads/shared.pm b/lib/threads/shared.pm +index f7e5ff8..45ad154 100644 +--- a/lib/threads/shared.pm ++++ b/lib/threads/shared.pm +@@ -8,7 +8,7 @@ use Config; + + use Scalar::Util qw(reftype refaddr blessed); + +-our $VERSION = '1.59'; # Please update the pod, too. ++our $VERSION = '1.60'; # Please update the pod, too. + my $XS_VERSION = $VERSION; + $VERSION = eval $VERSION; + +@@ -196,7 +196,7 @@ threads::shared - Perl extension for sharing data structures between threads + + =head1 VERSION + +-This document describes threads::shared version 1.59 ++This document describes threads::shared version 1.60 + + =head1 SYNOPSIS + +diff --git a/shared.xs b/shared.xs +index d0f7d1e..6cdf094 100644 +--- a/shared.xs ++++ b/shared.xs +@@ -115,6 +115,17 @@ + * without the prefix (e.g., sv, tmp or obj). + */ + ++/* this is lower overhead than warn() and less likely to interfere ++ with other parts of perl (like with the debugger.) ++*/ ++#ifdef SHARED_TRACE_LOCKS ++# define TRACE_LOCK(x) DEBUG_U(x) ++# define TRACE_LOCKv(x) DEBUG_Uv(x) ++#else ++# define TRACE_LOCK(x) ++# define TRACE_LOCKv(x) ++#endif ++ + #define PERL_NO_GET_CONTEXT + #include "EXTERN.h" + #include "perl.h" +@@ -211,8 +222,24 @@ recursive_lock_release(pTHX_ recursive_lock_t *lock) + if (--lock->locks == 0) { + lock->owner = NULL; + COND_SIGNAL(&lock->cond); ++ TRACE_LOCK( ++ PerlIO_printf(Perl_debug_log, "shared lock released %p for %p at %s:%d\n", ++ lock, aTHX, CopFILE(PL_curcop), CopLINE(PL_curcop)) ++ ); ++ } ++ else { ++ TRACE_LOCKv( ++ PerlIO_printf(Perl_debug_log, "shared lock unbump %p for %p at %s:%d\n", ++ lock, aTHX, CopFILE(PL_curcop), CopLINE(PL_curcop)) ++ ); + } + } ++ else { ++ TRACE_LOCK( ++ PerlIO_printf(Perl_debug_log, "bad shared lock release %p for %p (owned by %p) at %s:%d\n", ++ lock, aTHX, lock->owner, CopFILE(PL_curcop), CopLINE(PL_curcop)) ++ ); ++ } + MUTEX_UNLOCK(&lock->mutex); + } + +@@ -224,8 +251,16 @@ recursive_lock_acquire(pTHX_ recursive_lock_t *lock, const char *file, int line) + assert(aTHX); + MUTEX_LOCK(&lock->mutex); + if (lock->owner == aTHX) { ++ TRACE_LOCKv( ++ PerlIO_printf(Perl_debug_log, "shared lock bump %p (%p) at %s:%d\n", ++ lock, lock->owner, CopFILE(PL_curcop), CopLINE(PL_curcop)) ++ ); + lock->locks++; + } else { ++ TRACE_LOCK( ++ PerlIO_printf(Perl_debug_log, "shared lock try %p for %p (owned by %p) at %s:%d\n", ++ lock, aTHX, lock->owner, CopFILE(PL_curcop), CopLINE(PL_curcop)) ++ ); + while (lock->owner) { + #ifdef DEBUG_LOCKS + Perl_warn(aTHX_ " %p waiting - owned by %p %s:%d\n", +@@ -233,6 +268,10 @@ recursive_lock_acquire(pTHX_ recursive_lock_t *lock, const char *file, int line) + #endif + COND_WAIT(&lock->cond,&lock->mutex); + } ++ TRACE_LOCK( ++ PerlIO_printf(Perl_debug_log, "shared lock got %p at %s:%d\n", ++ lock, CopFILE(PL_curcop), CopLINE(PL_curcop)) ++ ); + lock->locks = 1; + lock->owner = aTHX; + #ifdef DEBUG_LOCKS +-- +2.20.1 + diff --git a/threads-shared-1.59-Upgrade-to-1.61.patch b/threads-shared-1.59-Upgrade-to-1.61.patch new file mode 100644 index 0000000..72e576b --- /dev/null +++ b/threads-shared-1.59-Upgrade-to-1.61.patch @@ -0,0 +1,57 @@ +From c48ee9c79eb7c4a36b7758fc4c3209ca0e5d759b Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Tue, 21 Apr 2020 12:52:31 +0200 +Subject: [PATCH] Upgrade to 1.61 + +--- + lib/threads/shared.pm | 4 ++-- + t/stress.t | 4 ++-- + 2 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/lib/threads/shared.pm b/lib/threads/shared.pm +index 45ad154..bd0e437 100644 +--- a/lib/threads/shared.pm ++++ b/lib/threads/shared.pm +@@ -8,7 +8,7 @@ use Config; + + use Scalar::Util qw(reftype refaddr blessed); + +-our $VERSION = '1.60'; # Please update the pod, too. ++our $VERSION = '1.61'; # Please update the pod, too. + my $XS_VERSION = $VERSION; + $VERSION = eval $VERSION; + +@@ -196,7 +196,7 @@ threads::shared - Perl extension for sharing data structures between threads + + =head1 VERSION + +-This document describes threads::shared version 1.60 ++This document describes threads::shared version 1.61 + + =head1 SYNOPSIS + +diff --git a/t/stress.t b/t/stress.t +index 1dd95e3..ccdeb0e 100644 +--- a/t/stress.t ++++ b/t/stress.t +@@ -12,7 +12,7 @@ BEGIN { + exit(0); + } + +- # http://lists.alioth.debian.org/pipermail/perl-maintainers/2011-June/002285.html ++ # https://lists.alioth.debian.org/pipermail/perl-maintainers/2011-June/002285.html + # There _is_ TLS support on m68k, but this stress test is overwhelming + # for the hardware + if ($^O eq 'linux' && $Config{archname} =~ /^m68k/) { +@@ -179,7 +179,7 @@ use threads::shared; + } elsif ($timeouts) { + # Frequently fails under MSWin32 due to deadlocking bug in Windows + # hence test is TODO under MSWin32 +- # http://rt.perl.org/rt3/Public/Bug/Display.html?id=41574 ++ # https://rt.perl.org/rt3/Public/Bug/Display.html?id=41574 + # http://support.microsoft.com/kb/175332 + if ($^O eq 'MSWin32') { + print("not ok 1 # TODO - not reliable under MSWin32\n") +-- +2.21.1 + diff --git a/threads-shared-1.60-threads-shared-fix-leak.patch b/threads-shared-1.60-threads-shared-fix-leak.patch new file mode 100644 index 0000000..5c0b310 --- /dev/null +++ b/threads-shared-1.60-threads-shared-fix-leak.patch @@ -0,0 +1,57 @@ +From b52cdd7a8525325deba04554d8a00a578c397d56 Mon Sep 17 00:00:00 2001 +From: David Mitchell +Date: Thu, 11 Jul 2019 15:17:48 +0100 +Subject: [PATCH] threads::shared: fix leak +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +When assigning a shared reference value to a variable containing a +shared string, the PV buffer in the shared space was leaked. For +example: + + my $s :shared = "foo"; + my $t :shared = shared_clone(\"bar"); + $s = $t; # "foo" in shared space leaked + +This was showing up as failed smokes under ASan. + +Petr Písař: Ported to 1.60 from perl commit +59c73bd3d62c5096a6f9b2e3cbe05e1ab4c158cf. + +Signed-off-by: Petr Písař +--- + shared.xs | 15 +++++++++++---- + 1 file changed, 11 insertions(+), 4 deletions(-) + +diff --git a/shared.xs b/shared.xs +index 6cdf094..858c6d6 100644 +--- a/shared.xs ++++ b/shared.xs +@@ -818,12 +818,19 @@ sharedsv_scalar_store(pTHX_ SV *sv, SV *ssv) + SV *obj = SvRV(sv); + SV *sobj = Perl_sharedsv_find(aTHX_ obj); + if (sobj) { ++ SV* tmpref; + SHARED_CONTEXT; +- (void)SvUPGRADE(ssv, SVt_RV); +- sv_setsv_nomg(ssv, &PL_sv_undef); ++ /* Creating a tmp ref to sobj then assigning it to ssv ensures ++ * that any previous contents of ssv are correctly freed ++ * by sv_setsv(). Not sure if there is a better, API-legal way ++ * to achieve this */ ++ tmpref = newSV_type(SVt_RV); ++ SvRV_set(tmpref, sobj); ++ SvROK_on(tmpref); ++ SvREFCNT_inc_simple_NN(sobj); ++ sv_setsv_nomg(ssv, tmpref); ++ SvREFCNT_dec_NN(tmpref); + +- SvRV_set(ssv, SvREFCNT_inc(sobj)); +- SvROK_on(ssv); + if (SvOBJECT(sobj)) { + /* Remove any old blessing */ + SvREFCNT_dec(SvSTASH(sobj)); +-- +2.20.1 + diff --git a/threads-shared-1.61-Upgrade-to-1.62.patch b/threads-shared-1.61-Upgrade-to-1.62.patch new file mode 100644 index 0000000..553e058 --- /dev/null +++ b/threads-shared-1.61-Upgrade-to-1.62.patch @@ -0,0 +1,48 @@ +From 25d469721e26fbc7afd670776ae9523013e9fdf5 Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Thu, 6 May 2021 10:38:30 +0200 +Subject: [PATCH] Upgrade to 1.62 + +--- + lib/threads/shared.pm | 4 ++-- + shared.xs | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/lib/threads/shared.pm b/lib/threads/shared.pm +index bd0e437..3674d83 100644 +--- a/lib/threads/shared.pm ++++ b/lib/threads/shared.pm +@@ -8,7 +8,7 @@ use Config; + + use Scalar::Util qw(reftype refaddr blessed); + +-our $VERSION = '1.61'; # Please update the pod, too. ++our $VERSION = '1.62'; # Please update the pod, too. + my $XS_VERSION = $VERSION; + $VERSION = eval $VERSION; + +@@ -196,7 +196,7 @@ threads::shared - Perl extension for sharing data structures between threads + + =head1 VERSION + +-This document describes threads::shared version 1.61 ++This document describes threads::shared version 1.62 + + =head1 SYNOPSIS + +diff --git a/shared.xs b/shared.xs +index 858c6d6..4931a61 100644 +--- a/shared.xs ++++ b/shared.xs +@@ -1183,7 +1183,7 @@ sharedsv_array_mg_free(pTHX_ SV *sv, MAGIC *mg) + * This is called when perl is about to access an element of + * the array - + */ +-#if PERL_VERSION >= 11 ++#if PERL_VERSION_GE(5,11,0) + static int + sharedsv_array_mg_copy(pTHX_ SV *sv, MAGIC* mg, + SV *nsv, const char *name, I32 namlen) +-- +2.30.2 + diff --git a/threads-shared-1.62-Upgrade-to-1.64.patch b/threads-shared-1.62-Upgrade-to-1.64.patch new file mode 100644 index 0000000..60b28d0 --- /dev/null +++ b/threads-shared-1.62-Upgrade-to-1.64.patch @@ -0,0 +1,154 @@ +From ff20adba57602ad3ae936eff6718f354d7352f1d Mon Sep 17 00:00:00 2001 +From: Jitka Plesnikova +Date: Thu, 12 May 2022 14:53:08 +0200 +Subject: [PATCH] Upgrade to 1.64 + +--- + lib/threads/shared.pm | 4 +-- + shared.xs | 23 +++++++------- + t/pod.t | 70 ------------------------------------------- + 3 files changed, 13 insertions(+), 84 deletions(-) + delete mode 100644 t/pod.t + +diff --git a/lib/threads/shared.pm b/lib/threads/shared.pm +index 3674d83..1fd2899 100644 +--- a/lib/threads/shared.pm ++++ b/lib/threads/shared.pm +@@ -8,7 +8,7 @@ use Config; + + use Scalar::Util qw(reftype refaddr blessed); + +-our $VERSION = '1.62'; # Please update the pod, too. ++our $VERSION = '1.64'; # Please update the pod, too. + my $XS_VERSION = $VERSION; + $VERSION = eval $VERSION; + +@@ -196,7 +196,7 @@ threads::shared - Perl extension for sharing data structures between threads + + =head1 VERSION + +-This document describes threads::shared version 1.62 ++This document describes threads::shared version 1.64 + + =head1 SYNOPSIS + +diff --git a/shared.xs b/shared.xs +index 4931a61..6a7f03c 100644 +--- a/shared.xs ++++ b/shared.xs +@@ -824,10 +824,7 @@ sharedsv_scalar_store(pTHX_ SV *sv, SV *ssv) + * that any previous contents of ssv are correctly freed + * by sv_setsv(). Not sure if there is a better, API-legal way + * to achieve this */ +- tmpref = newSV_type(SVt_RV); +- SvRV_set(tmpref, sobj); +- SvROK_on(tmpref); +- SvREFCNT_inc_simple_NN(sobj); ++ tmpref = newRV_inc(sobj); + sv_setsv_nomg(ssv, tmpref); + SvREFCNT_dec_NN(tmpref); + +@@ -1296,14 +1293,16 @@ static void + Perl_sharedsv_init(pTHX) + { + dTHXc; +- PL_sharedsv_space = perl_alloc(); +- perl_construct(PL_sharedsv_space); +- /* The pair above leaves us in shared context (what dTHX would get), +- * but aTHX still points to caller context */ +- aTHX = PL_sharedsv_space; +- LEAVE; /* This balances the ENTER at the end of perl_construct. */ +- PERL_SET_CONTEXT((aTHX = caller_perl)); +- recursive_lock_init(aTHX_ &PL_sharedsv_lock); ++ if (!PL_sharedsv_space) { ++ PL_sharedsv_space = perl_alloc(); ++ perl_construct(PL_sharedsv_space); ++ /* The pair above leaves us in shared context (what dTHX would get), ++ * but aTHX still points to caller context */ ++ aTHX = PL_sharedsv_space; ++ LEAVE; /* This balances the ENTER at the end of perl_construct. */ ++ PERL_SET_CONTEXT((aTHX = caller_perl)); ++ recursive_lock_init(aTHX_ &PL_sharedsv_lock); ++ } + PL_lockhook = &Perl_sharedsv_locksv; + PL_sharehook = &Perl_sharedsv_share; + #ifdef PL_destroyhook +diff --git a/t/pod.t b/t/pod.t +deleted file mode 100644 +index 5d0cb42..0000000 +--- a/t/pod.t ++++ /dev/null +@@ -1,70 +0,0 @@ +-use strict; +-use warnings; +- +-use Test::More; +-if ($ENV{RUN_MAINTAINER_TESTS}) { +- plan 'tests' => 3; +-} else { +- plan 'skip_all' => 'Module maintainer tests'; +-} +- +-SKIP: { +- if (! eval 'use Test::Pod 1.26; 1') { +- skip('Test::Pod 1.26 required for testing POD', 1); +- } +- +- pod_file_ok('lib/threads/shared.pm'); +-} +- +-SKIP: { +- if (! eval 'use Test::Pod::Coverage 1.08; 1') { +- skip('Test::Pod::Coverage 1.08 required for testing POD coverage', 1); +- } +- +- pod_coverage_ok('threads::shared', +- { +- 'trustme' => [ +- ], +- 'private' => [ +- qr/^import$/, +- ] +- } +- ); +-} +- +-SKIP: { +- if (! eval 'use Test::Spelling; 1') { +- skip('Test::Spelling required for testing POD spelling', 1); +- } +- if (system('aspell help >/dev/null 2>&1')) { +- skip("'aspell' required for testing POD spelling", 1); +- } +- set_spell_cmd('aspell list --lang=en'); +- add_stopwords(); +- pod_file_spelling_ok('lib/threads/shared.pm', 'shared.pm spelling'); +- unlink("/home/$ENV{'USER'}/en.prepl", "/home/$ENV{'USER'}/en.pws"); +-} +- +-exit(0); +- +-__DATA__ +- +-Artur +-Hedden +- +-cpan +-CPAN +-CONDVAR +-LOCKVAR +-refcnt +-variable's +-destructor +-destructors +-Destructors +- +-perlfunc +-dualvar +-SV +- +-MetaCPAN +-__END__ +-- +2.34.3 + -- Gitee