Beefy Boxes and Bandwidth Generously Provided by pair Networks
We don't bite newbies here... much
 
PerlMonks  

Storable cannot retrieve shared variable

by Anonymous Monk
on Nov 10, 2022 at 20:23 UTC ( [id://11148118]=perlquestion: print w/replies, xml ) Need Help??

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks, do you know, if it is possible to unshare a variable shared by using threads::shared before store it by using Storable module. It seems, that Storable retrieve() method has problems with shared variables:

[rrr]$ cat /tmp/test_storable_shared.pl #!/usr/bin/perl use strict; use warnings; use Storable; use threads; use threads::shared; my $file = "fff"; my $href_1 = shared_clone({ a => 1}); store($href_1, $file); my $href_2 = retrieve($file); printf "%s => %s\n", $_, $href_2->{$_} for keys %$href_2; [rrr]$
[rrr]$ /tmp/test_storable_shared.pl Can't locate object method "FETCH" via package "threads::shared::tie" +at /tmp/test_storable_shared.pl line 18. [rrr]$
[rrr]$ cat /etc/redhat-release Red Hat Enterprise Linux Server release 7.9 (Maipo) [rrr]$
[rrr]$ perl -V Summary of my perl5 (revision 5 version 16 subversion 3) configuration +: Platform: osname=linux, osvers=2.6.32-754.12.1.el6.x86_64, archname=x86_64-l +inux-thread-multi uname='linux x86-vm-22.build.eng.bos.redhat.com 2.6.32-754.12.1.el +6.x86_64 #1 smp thu mar 7 22:07:44 est 2019 x86_64 x86_64 x86_64 gnul +inux ' config_args='-des -Doptimize=-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOU +RCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 + -grecord-gcc-switches -m64 -mtune=generic -Dccdlflags=-Wl,--enable +-new-dtags -Dlddlflags=-shared -O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOUR +CE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 +-grecord-gcc-switches -m64 -mtune=generic -Wl,-z,relro -DDEBUGGING +=-g -Dversion=5.16.3 -Dmyhostname=localhost -Dperladmin=root@localhos +t -Dcc=gcc -Dcf_by=Red Hat, Inc. -Dprefix=/usr -Dvendorprefix=/usr -D +siteprefix=/usr/local -Dsitelib=/usr/local/share/perl5 -Dsitearch=/us +r/local/lib64/perl5 -Dprivlib=/usr/share/perl5 -Dvendorlib=/usr/share +/perl5/vendor_perl -Darchlib=/usr/lib64/perl5 -Dvendorarch=/usr/lib64 +/perl5/vendor_perl -Darchname=x86_64-linux-thread-multi -Dlibpth=/usr +/local/lib64 /lib64 /usr/lib64 -Duseshrplib -Dusethreads -Duseithread +s -Dusedtrace=/usr/bin/dtrace -Duselargefiles -Dd_semctl_semun -Di_db + -Ui_ndbm -Di_gdbm -Di_shadow -Di_syslog -Dman3ext=3pm -Duseperlio -D +installusrbinperl=n -Ubincompat5005 -Uversiononly -Dpager=/usr/bin/le +ss -isr -Dd_gethostent_r_proto -Ud_endhostent_r_proto -Ud_sethostent_ +r_proto -Ud_endprotoent_r_proto -Ud_setprotoent_r_proto -Ud_endserven +t_r_proto -Ud_setservent_r_proto -Dscriptdir=/usr/bin -Dusesitecustom +ize' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=und +ef use64bitint=define, use64bitall=define, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='gcc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasin +g -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D +_FILE_OFFSET_BITS=64', optimize='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions +-fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switc +hes -m64 -mtune=generic', cppflags='-D_REENTRANT -D_GNU_SOURCE -fno-strict-aliasing -pipe -f +stack-protector -I/usr/local/include' ccversion='', gccversion='4.8.5 20150623 (Red Hat 4.8.5-44)', gcco +sandvers='' intsize=4, longsize=8, ptrsize=8, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=1 +6 ivtype='long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', + lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='gcc', ldflags =' -fstack-protector' libpth=/usr/local/lib64 /lib64 /usr/lib64 libs=-lresolv -lnsl -lgdbm -ldb -ldl -lm -lcrypt -lutil -lpthread +-lc -lgdbm_compat perllibs=-lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc libc=, so=so, useshrplib=true, libperl=libperl.so gnulibc_version='2.17' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,--en +able-new-dtags -Wl,-rpath,/usr/lib64/perl5/CORE' cccdlflags='-fPIC', lddlflags='-shared -O2 -g -pipe -Wall -Wp,-D_F +ORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buf +fer-size=4 -grecord-gcc-switches -m64 -mtune=generic -Wl,-z,relro ' Characteristics of this binary (from libperl): Compile-time options: HAS_TIMES MULTIPLICITY PERLIO_LAYERS PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP PERL_PRESERVE_IVUV USE_64_BIT +_ALL USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_LOCALE USE_LOCALE_COLLATE USE_LOCALE_CTYPE USE_LOCALE_NUMERIC USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API USE_SITECUSTOMIZE Locally applied patches: Fedora Patch1: Removes date check, Fedora/RHEL specific Fedora Patch3: support for libdir64 Fedora Patch4: use libresolv instead of libbind Fedora Patch5: USE_MM_LD_RUN_PATH Fedora Patch6: Skip hostname tests, due to builders not being +network capable Fedora Patch7: Dont run one io test due to random builder fail +ures Fedora Patch9: Fix find2perl to translate ? glob properly (RT# +113054) Fedora Patch10: Fix broken atof (RT#109318) Fedora Patch13: Clear $@ before "do" I/O error (RT#113730) Fedora Patch14: Do not truncate syscall() return value to 32 b +its (RT#113980) Fedora Patch15: Override the Pod::Simple::parse_file (CPANRT#7 +7530) Fedora Patch16: Do not leak with attribute on my variable (RT# +114764) Fedora Patch17: Allow operator after numeric keyword argument +(RT#105924) Fedora Patch18: Extend stack in File::Glob::glob, (RT#114984) Fedora Patch19: Do not crash when vivifying $| Fedora Patch20: Fix misparsing of maketext strings (CVE-2012-6 +329) Fedora Patch21: Add NAME headings to CPAN modules (CPANRT#7339 +6) Fedora Patch22: Fix leaking tied hashes (RT#107000) [1] Fedora Patch23: Fix leaking tied hashes (RT#107000) [2] Fedora Patch24: Fix leaking tied hashes (RT#107000) [3] Fedora Patch25: Fix dead lock in PerlIO after fork from thread + (RT#106212) Fedora Patch26: Make regexp safe in a signal handler (RT#11487 +8) Fedora Patch27: Update h2ph(1) documentation (RT#117647) Fedora Patch28: Update pod2html(1) documentation (RT#117623) Fedora Patch29: Document Math::BigInt::CalcEmu requires Math:: +BigInt (CPAN RT#85015) RHEL Patch30: Use stronger algorithm needed for FIPS in t/op/c +rypt.t (RT#121591) RHEL Patch31: Make *DBM_File desctructors thread-safe (RT#6191 +2) RHEL Patch32: Use stronger algorithm needed for FIPS in t/op/t +aint.t (RT#123338) RHEL Patch33: Remove CPU-speed-sensitive test in Benchmark tes +t RHEL Patch34: Make File::Glob work with threads again RHEL Patch35: Fix CRLF conversion in ASCII FTP upload (CPAN RT +#41642) RHEL Patch36: Do not leak the temp utf8 copy of namepv (CPAN R +T#123786) RHEL Patch37: Fix duplicating PerlIO::encoding when spawning t +hreads (RT#31923) RHEL Patch38: Add SSL support to Net::SMTP (CPAN RT#93823) [1] RHEL Patch39: Add SSL support to Net::SMTP (CPAN RT#93823) [2] RHEL Patch40: Add SSL support to Net::SMTP (CPAN RT#93823) [3] RHEL Patch41: Add SSL support to Net::SMTP (CPAN RT#93823) [4] RHEL Patch42: Do not overload ".." in Math::BigInt (CPAN RT#80 +182) RHEL Patch43: Fix CVE-2018-18311 Integer overflow leading to b +uffer overflow RHEL Patch44: Fix a spurious timeout in Net::FTP::close (CPAN +RT#18504) RHEL Patch45: Fix day of year parsing (CPAN RT#88211) RHEL Patch47: Fix CVE-2020-12723 (GH#16947) RHEL Patch48: Fix CVE-2020-10543 RHEL Patch49: Fix CVE-2020-10878 Built under linux Compiled at Jan 15 2021 09:24:16 @INC: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 . [rrr]$

Replies are listed 'Best First'.
Re: Storable cannot retrieve shared variable
by Corion (Patriarch) on Nov 10, 2022 at 22:16 UTC

    Most likely, you can untie the variable, but that likely removes its shared status.

      Thanks for the reply, I thought already in this direction, it does not work for :shared ...
      [rrr]$ cat /tmp/test_storable_shared.pl #!/usr/bin/perl use strict; use warnings; use Storable; use threads; use threads::shared; my $file = "fff"; my $href_1 = shared_clone({ a => 1}); untie $href_1; store($href_1, $file); my $href_2 = retrieve($file); printf "%s => %s\n", $_, $href_2->{$_} for keys %$href_2; [rrr]$ [rrr]$ /tmp/test_storable_shared.pl Can't locate object method "FETCH" via package "threads::shared::tie" +at /tmp/test_storable_shared.pl line 20. [rrr]$

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://11148118]
Approved by marto
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (2)
As of 2024-04-25 23:02 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found