Open specialcircumstances opened 11 years ago
Thought I'd try and simplify things.
I have written a basic module and script to test this as simply as possible.
This is on the Fedora 18 box previously mentioned.
[jon@localhost CaravanCoding]$ ./deeptest.pl > results.txt CecilMods::DBMDeepTester is successfully loaded! Can't call method "get_next_key" on an undefined value at /usr/share/perl5/vendor_perl/DBM/Deep/Engine.pm line 258. [jon@localhost CaravanCoding]$
I've 7 zipped up the script, the module, the DB, and the results.txt file. Just got to find out how to upload it.
Hope this is useful - or at least eliminates a few things.
Problem is also present in fresh installation of Raspbery flvaoured Debian (Raspbian).
I've run up an install of Raspian (based on Debian Wheezy I believe) on the Pi, and installed the test scripts plus your module (apart from that completely fresh installation).
Sadly, still got the same issue, so it would appear this problem is not confined to the Fedora stable.
pi@raspberrypi ~/CaravanCodingFedTester11072013 $ uname -a Linux raspberrypi 3.6.11+ #456 PREEMPT Mon May 20 17:42:15 BST 2013 armv6l GNU/Linux pi@raspberrypi ~/CaravanCodingFedTester11072013 $ perl -v
This is perl 5, version 14, subversion 2 (v5.14.2) built for arm-linux-gnueabihf-thread-multi-64int (with 80 registered patches, see perl -V for more detail)
Copyright 1987-2011, Larry Wall
Perl may be copied only under the terms of either the Artistic License or the GNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found on this system using "man perl" or "perldoc perl". If you have access to the Internet, point your browser at http://www.perl.org/, the Perl Home Page.
pi@raspberrypi ~/CaravanCodingFedTester11072013 $ ./deeptest.pl > results.txt CecilMods::DBMDeepTester is successfully loaded! Can't call method "get_next_key" on an undefined value at /usr/share/perl5/DBM/Deep/Engine.pm line 258. pi@raspberrypi ~/CaravanCodingFedTester11072013 $ pi@raspberrypi ~/CaravanCodingFedTester11072013 $ perl -V Summary of my perl5 (revision 5 version 14 subversion 2) configuration:
Platform: osname=linux, osvers=3.0.59, archname=arm-linux-gnueabihf-thread-multi-64int uname='linux linaro-ubuntu-desktop 3.0.59 #1 smp mon jan 21 01:12:11 utc 2013 armv7l gnulinux ' config_args='-Dusethreads -Duselargefiles -Dcc=cc -Dccflags=-DDEBIAN -D_FORTIFY_SOURCE=2 -g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security -Dldflags= -Wl,-z,relro -Dlddlflags=-shared -Wl,-z,relro -Dcccdlflags=-fPIC -Darchname=arm-linux-gnueabihf -Dprefix=/usr -Dprivlib=/usr/share/perl/5.14 -Darchlib=/usr/lib/perl/5.14 -Dvendorprefix=/usr -Dvendorlib=/usr/share/perl5 -Dvendorarch=/usr/lib/perl5 -Dsiteprefix=/usr/local -Dsitelib=/usr/local/share/perl/5.14.2 -Dsitearch=/usr/local/lib/perl/5.14.2 -Dman1dir=/usr/share/man/man1 -Dman3dir=/usr/share/man/man3 -Dsiteman1dir=/usr/local/man/man1 -Dsiteman3dir=/usr/local/man/man3 -Duse64bitint -Dman1ext=1 -Dman3ext=3perl -Dpager=/usr/bin/sensible-pager -Uafs -Ud_csh -Ud_ualarm -Uusesfio -Uusenm -Ui_libutil -DDEBUGGING=-g -Doptimize=-O2 -Duseshrplib -Dlibperl=libperl.so.5.14.2 -des' hint=recommended, useposix=true, d_sigaction=define useithreads=define, usemultiplicity=define useperlio=define, d_sfio=undef, uselargefiles=define, usesocks=undef use64bitint=define, use64bitall=undef, uselongdouble=undef usemymalloc=n, bincompat5005=undef Compiler: cc='cc', ccflags ='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64', optimize='-O2 -g', cppflags='-D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fstack-protector -fno-strict-aliasing -pipe -I/usr/local/include' ccversion='', gccversion='4.7.2', gccosandvers='' intsize=4, longsize=4, ptrsize=4, doublesize=8, byteorder=12345678 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=8 ivtype='long long', ivsize=8, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, prototype=define Linker and Libraries: ld='cc', ldflags =' -fstack-protector -L/usr/local/lib' libpth=/usr/local/lib /lib/arm-linux-gnueabihf /lib /usr/lib/arm-linux-gnueabihf /usr/lib libs=-lgdbm -lgdbm_compat -ldb -ldl -lm -lpthread -lc -lcrypt perllibs=-ldl -lm -lpthread -lc -lcrypt libc=, so=so, useshrplib=true, libperl=libperl.so.5.14.2 gnulibc_version='2.13' Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-Wl,-E' cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib -fstack-protector'
Characteristics of this binary (from libperl): Compile-time options: MULTIPLICITY PERL_DONT_CREATE_GVSV PERL_IMPLICIT_CONTEXT PERL_MALLOC_WRAP PERL_PRESERVE_IVUV USE_64_BIT_INT USE_ITHREADS USE_LARGE_FILES USE_PERLIO USE_PERL_ATOF USE_REENTRANT_API Locally applied patches: DEBPKG:debian/arm_thread_stress_timeout - http://bugs.debian.org/501970 Raise the timeout of ext/threads/shared/t/stress.t to accommodate slower build hosts DEBPKG:debian/cpan_definstalldirs - Provide a sensible INSTALLDIRS default for modules installed from CPAN. DEBPKG:debian/db_file_ver - http://bugs.debian.org/340047 Remove overly restrictive DB_File version check. DEBPKG:debian/doc_info - Replace generic man(1) instructions with Debian-specific information. DEBPKG:debian/enc2xs_inc - http://bugs.debian.org/290336 Tweak enc2xs to follow symlinks and ignore missing @INC directories. DEBPKG:debian/errno_ver - http://bugs.debian.org/343351 Remove Errno version check due to upgrade problems with long-running processes. DEBPKG:debian/libperl_embed_doc - http://bugs.debian.org/186778 Note that libperl-dev package is required for embedded linking DEBPKG:fixes/respect_umask - Respect umask during installation DEBPKG:debian/writable_site_dirs - Set umask approproately for site install directories DEBPKG:debian/extutils_set_libperl_path - EU:MM: Set location of libperl.a to /usr/lib DEBPKG:debian/no_packlist_perllocal - Don't install .packlist or perllocal.pod for perl or vendor DEBPKG:debian/prefix_changes - Fiddle with _PREFIX and variables written to the makefile DEBPKG:debian/fakeroot - Postpone LD_LIBRARY_PATH evaluation to the binary targets. DEBPKG:debian/instmodsh_doc - Debian policy doesn't install .packlist files for core or vendor. DEBPKG:debian/ld_run_path - Remove standard libs from LD_RUN_PATH as per Debian policy. DEBPKG:debian/libnet_config_path - Set location of libnet.cfg to /etc/perl/Net as /usr may not be writable. DEBPKG:debian/m68k_thread_stress - http://bugs.debian.org/517938 http://bugs.debian.org/495826 Disable some threads tests on m68k for now due to missing TLS. DEBPKG:debian/mod_paths - Tweak @INC ordering for Debian DEBPKG:debian/module_build_man_extensions - http://bugs.debian.org/479460 Adjust Module::Build manual page extensions for the Debian Perl policy DEBPKG:debian/prune_libs - http://bugs.debian.org/128355 Prune the list of libraries wanted to what we actually need. DEBPKG:fixes/net_smtp_docs - [rt.cpan.org #36038] http://bugs.debian.org/100195 Document the Net::SMTP 'Port' option DEBPKG:debian/perlivp - http://bugs.debian.org/510895 Make perlivp skip include directories in /usr/local DEBPKG:debian/cpanplus_definstalldirs - http://bugs.debian.org/533707 Configure CPANPLUS to use the site directories by default. DEBPKG:debian/cpanplus_config_path - Save local versions of CPANPLUS::Config::System into /etc/perl. DEBPKG:debian/deprecate-with-apt - http://bugs.debian.org/580034 Point users to Debian packages of deprecated core modules DEBPKG:fixes/hurd-ccflags - [a190e64] http://bugs.debian.org/587901 [perl #92244] Make hints/gnu.sh append to $ccflags rather than overriding them DEBPKG:debian/squelch-locale-warnings - http://bugs.debian.org/508764 Squelch locale warnings in Debian package maintainer scripts DEBPKG:debian/skip-upstream-git-tests - Skip tests specific to the upstream Git repository DEBPKG:fixes/extutils-cbuilder-cflags - [011e8fb] http://bugs.debian.org/624460 [perl #89478] Append CFLAGS and LDFLAGS to their Config.pm counterparts in EU::CBuilder DEBPKG:fixes/module-build-home-directory - http://bugs.debian.org/624850 [rt.cpan.org #67893] Fix failing tilde test when run under a UID without a passwd entry DEBPKG:debian/patchlevel - http://bugs.debian.org/567489 List packaged patches for 5.14.2-21+rpi1 in patchlevel.h DEBPKG:fixes/h2ph-multiarch - [e7ec705] http://bugs.debian.org/625808 [perl #90122] Make h2ph correctly search gcc include directories DEBPKG:fixes/index-tainting - [3b36395] http://bugs.debian.org/291450 [perl #64804] RT 64804: tainting with index() of a constant DEBPKG:fixes/document_makemaker_ccflags - http://bugs.debian.org/628522 [rt.cpan.org #68613] Document that CCFLAGS should include $Config{ccflags} DEBPKG:fixes/sys-syslog-socket-timeout-kfreebsd.patch - http://bugs.debian.org/627821 [rt.cpan.org #69997] Use a socket timeout on GNU/kFreeBSD to catch ICMP port unreachable messages DEBPKG:fixes/hurd-hints - http://bugs.debian.org/636609 Improve general GNU hints, needed for GNU/Hurd. DEBPKG:fixes/podfixes - [7698aed] http://bugs.debian.org/637816 Fix typos in several pod/perl.pod files DEBPKG:debian/find_html2text - http://bugs.debian.org/640479 Configure CPAN::Distribution with correct name of html2text DEBPKG:fixes/digest_eval_hole - http://bugs.debian.org/644108 Close the eval "require $module" security hole in Digest->new($algorithm) DEBPKG:fixes/hurd-ndbm - [f0d0a20] [perl #102680] http://bugs.debian.org/645989 Add GNU/Hurd hints for NDBM_File DEBPKG:fixes/sysconf.t-posix - [8040185] [perl #102888] http://bugs.debian.org/646016 Fix hang in ext/POSIX/t/sysconf.t on GNU/Hurd DEBPKG:fixes/hurd-largefile - [1fda587] [perl #103014] http://bugs.debian.org/645790 enable LFS on GNU/Hurd DEBPKG:debian/hurd_test_todo_syslog - http://bugs.debian.org/650093 Disable failing GNU/Hurd tests in cpan/Sys-Syslog/t/syslog.t DEBPKG:fixes/hurd_skip_itimer_virtual - [rt.cpan.org #72754] http://bugs.debian.org/650094 Skip interval timer tests in Time::HiRes on GNU/Hurd DEBPKG:debian/hurd_test_skip_sigdispatch - http://bugs.debian.org/650188 Disable failing GNU/Hurd tests op/sigdispatch.t DEBPKG:debian/hurd_test_skip_stack - http://bugs.debian.org/650175 Disable failing GNU/Hurd tests dist/threads/t/stack.t DEBPKG:debian/hurd_test_skip_pipe - http://bugs.debian.org/650187 Disable failing GNU/Hurd tests io/pipe.t DEBPKG:debian/hurd_test_skip_io_pipe - http://bugs.debian.org/650096 Disable failing GNU/Hurd tests dist/IO/t/io_pipe.t DEBPKG:fixes/manpage_name_CPAN - http://bugs.debian.org/650448 [rt.cpan.org #73396] cpan/CPAN: add NAME headings in modules with POD DEBPKG:fixes/manpage_name_CPANPLUS - http://bugs.debian.org/650450 [rt.cpan.org #73398] cpan/CPANPLUS: add NAME headings in modules with POD DEBPKG:fixes/manpage_name_Test-Harness - http://bugs.debian.org/650451 [rt.cpan.org #73399] cpan/Test-Harness: add NAME headings in modules with POD DEBPKG:fixes/manpage_name_Term-UI - http://bugs.debian.org/650452 [rt.cpan.org #73400] cpan/Term-UI: add NAME headings in modules with POD DEBPKG:fixes/podlators_ae_ligature_fallback - http://bugs.debian.org/652851 Fix the ASCII fallback string for AE DEBPKG:fixes/fsf_postal_address - [de89470] Update references to the FSF's postal address DEBPKG:fixes/cpan_module_pod_fixes - [perl #106870] [rt.cpan.org #73447] [rt.cpan.org #73446] Fix POD formatting in Term-Cap and Pod-Parser DEBPKG:fixes/cgi_no_shellwords_pl - Use Text::ParseWords instead of shellwords.pl DEBPKG:fixes/path_max_fallback - [perl #109262] http://bugs.debian.org/656869 Don't use _POSIX_PATH_MAX as a fallback PATH_MAX DEBPKG:debian/makemaker-pasthru - http://bugs.debian.org/660195 [rt.cpan.org #28632] Make EU::MM pass LD through to recursive Makefile.PL invocations DEBPKG:fixes/propagate_tainted_errors.patch - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=663158 [perl #111654] properly propagate tainted errors DEBPKG:debian/perl5db-x-terminal-emulator.patch - http://bugs.debian.org/668490 Invoke x-terminal-emulator rather than xterm in perl5db.pl DEBPKG:fixes/socket_cache_propagate - http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=659075 [rt.cpan.org #61577] [perl #112736] sockdomain and socktype undef on newly accepted sockets DEBPKG:fixes/ipc_open3 - [perl #114454] http://bugs.debian.org/683894 IPC::Open3::open3(..., '-') broken DEBPKG:fixes/string_repeat_overrun - http://bugs.debian.org/689314 [b675304] avoid calling memset with a negative count DEBPKG:debian/cpan-missing-site-dirs - http://bugs.debian.org/688842 Fix CPAN::FirstTime defaults with nonexisting site dirs if a parent is writable DEBPKG:fixes/kfreebsd-overrides - http://bugs.debian.org/689713 [perl #115324] [7dc6565] Remove unnecessary overrides in gnukfreebsd and gnuknetbsd hints. DEBPKG:fixes/tainted-smartmatch - [be88a5c] http://bugs.debian.org/690571 [perl #93590] $tainted ~~ [...] failing DEBPKG:fixes/regexp-matching-starter - [6e634c5] http://bugs.debian.org/690975 [perl #101710] Regression with /i, latin1 chars. DEBPKG:fixes/regexp-matching-fold - [399fb9c] http://bugs.debian.org/690976 regexec.c: Fix "\x{FB01}\x{FB00}" =~ /ff/i DEBPKG:fixes/regexp-matching-opposite-case - [dc91d5a] http://bugs.debian.org/690979 [perl #101970] /[[:lower:]]/i matches upper case DEBPKG:fixes/reading-glob-copy-handle - [fd1564b] http://bugs.debian.org/629363 [perl #92258] <$fh> hangs on a glob copy DEBPKG:fixes/smartmatch-rhs-precedence - http://bugs.debian.org/691102 [011be0b] Enforce Any ~~ Object smartmatch precedence DEBPKG:fixes/perlcheat-update - http://bugs.debian.org/691112 [ab0ae0a] Update PerlCheat to 5.14 DEBPKG:fixes/cgi-cr-escaping - http://bugs.debian.org/693420 CR escaping for P3P and Set-Cookie headers DEBPKG:fixes/maketext-code-execution - [1735f6f] http://bugs.debian.org/695224 Fix misparsing of maketext strings. DEBPKG:fixes/storable-security-warning - [664f237] http://bugs.debian.org/695223 add a note about security concerns in Storable DEBPKG:fixes/digest-sha-doublefree - [rt.cpan.org #82655] http://bugs.debian.org/698172 [a8c6ff7] Fix a double-free bug in Digest::SHA DEBPKG:fixes/64bitint-signedness-wraparound - http://bugs.debian.org/698320 [94e529c] Avoid wraparound when casting unsigned size_t to signed ssize_t. DEBPKG:fixes/stdin-sigchld - http://bugs.debian.org/700171 [perl #116621] [be48bbe] add a couple missing LEAVEs in perlio_async_run() DEBPKG:fixes/hsplit-rehash - [d59e31f] http://bugs.debian.org/702296 Prevent premature hsplit() calls, and only trigger REHASH after hsplit() DEBPKG:fixes/encode-memleak - http://bugs.debian.org/702416 [5814803] Encode: Fixed a memory leak that occurred in the UTF-8 encoding. Built under linux Compiled at May 4 2013 14:10:36 @INC: /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl .
I'm not a maintainer of this project, but what you've posted so far is pretty long. Would you be able to post a small example program that exhibits the problem?
If this is still an issue with the latest release, please raise a ticket on DBM::Deep's new repo's issue tracker at https://github.com/DBM-Deep/DBM-Deep/issues, with complete instructions on how to replicate it.
When trying to step through multi-level hashes I get "Can't call method "get_next_key" on an undefined value at /usr/share/perl5/DBM/Deep/Engine.pm" whenever I use "next_key".
I've built a Fedora 18 VM on ESXi to just double check that it IS a Raspberry Pi thing (as Pidora is based on F18), and it turns out - it's not....
Build is Fedora 18, 32-bit, from Live CD. I've installed XFCE and the necessary perl modules, plus I've compiled in the Audio:Scan module (which needed little more than make, gcc and zlib-devel).
Running exactly the same test script, as soon as I try to walk through the hash table I hit the problem (see below for output).
So this would seem to be unrelated to the fact I'm running on the Raspberry Pi, but something to do with Fedora 18? Anyway, thought you might want to know as I guess it's much easier for you to troubleshoot as I'm sure you can spin up an F18 locally pretty quickly.
[jon@localhost CaravanCoding]$ uname -a
Linux localhost.localdomain 3.9.6-200.fc18.i686 #1 SMP Thu Jun 13 19:29:40 UTC 2013 i686 i686 i386 GNU/Linux
[jon@localhost CaravanCoding]$ perl -v
This is perl 5, version 16, subversion 3 (v5.16.3) built for i386-linux-thread-multi
[jon@localhost CaravanCoding]$ perl -d musictest.pl
Loading DB routines from perl5db.pl version 1.37 Editor support available.
Enter h or 'h h' for help, or 'man perldebug' for more help.
defined(%hash) is deprecated at CecilMods/Music.pm line 1097. at CecilMods/Music.pm line 1097. require CecilMods/Music.pm called at musictest.pl line 11 main::BEGIN() called at CecilMods/Music.pm line 1097 eval {...} called at CecilMods/Music.pm line 1097 (Maybe you should just omit the defined()?) at CecilMods/Music.pm line 1097. require CecilMods/Music.pm called at musictest.pl line 11 main::BEGIN() called at CecilMods/Music.pm line 1097 eval {...} called at CecilMods/Music.pm line 1097 defined(%hash) is deprecated at CecilMods/Music.pm line 1188. at CecilMods/Music.pm line 1188. require CecilMods/Music.pm called at musictest.pl line 11 main::BEGIN() called at CecilMods/Music.pm line 1188 eval {...} called at CecilMods/Music.pm line 1188 (Maybe you should just omit the defined()?) at CecilMods/Music.pm line 1188. require CecilMods/Music.pm called at musictest.pl line 11 main::BEGIN() called at CecilMods/Music.pm line 1188 eval {...} called at CecilMods/Music.pm line 1188 CecilMods::Music is successfully loaded! at CecilMods/Music.pm line 24. require CecilMods/Music.pm called at musictest.pl line 11 main::BEGIN() called at CecilMods/Music.pm line 0 eval {...} called at CecilMods/Music.pm line 0 main::(musictest.pl:13): my $loop = Glib::MainLoop->new(); DB<1> c CecilMods::Music DB unusable - reinitialising... at CecilMods/Music.pm line 84. Music::initialise('Music=HASH(0x9b1f1a0)') called at CecilMods/Music.pm line 72 Music::new('Music') called at musictest.pl line 15 Music object created Data dumper says '. $VAR1 = bless( { '_QL_TRACKS' => [], '_FF_NODE' => undef, '_CURRENT_TRACK' => undef, '_MDB' => bless( { 'TRACKTABLE' => bless( {}, 'DBM::Deep::Hash' ), 'ALBUMTABLE' => bless( {}, 'DBM::Deep::Hash' ), 'ARTALBTABLE' => bless( {}, 'DBM::Deep::Hash' ), 'ARTTRKTABLE' => bless( {}, 'DBM::Deep::Hash' ), 'SAVESTATE' => bless( {}, 'DBM::Deep::Hash' ) }, 'DBM::Deep::Hash' ), '_PLAYLIST_MAXLEN' => 100, '_DBFILE' => 'CecilMusicDB.db', '_FILEREAD_POS' => 0, '_PLAYLIST' => undef, '_CURRENT_LENGTH' => undef, '_FILEREAD_ACT' => 0, '_FILEREAD_TOT' => 0, '_PLAYER' => bless( {}, 'GStreamer::Pipeline' ), '_CURRENT_POS' => undef, '_QL_ARTISTS' => [], '_FILEREAD_SUC' => 0, '_MEDIA_DIR' => '/home/jon/Music/', '_PLAYLIST_CHANGED' => 0, '_STATE' => 'READY' }, 'Music' );
Running FindFile Test Supported media is: '.mp3','.m4a','.m4p','.mp4' New Album : Dirt Disc: 1/1 - Alice In Chains New Artist Found: Alice In Chains New Album : Nothing Safe: Best Of The Box Disc: 1/1 - Alice In Chains New Album : Rock In A Hard Place Disc: 1/1 - Aerosmith New Artist Found: Aerosmith New Album : Night In The Ruts Disc: 1/1 - Aerosmith New Album : Permanent Vacation Disc: 1/1 - Aerosmith New Album : Draw The Line Disc: 1/1 - Aerosmith MUSIC MOD: Alice In Chains: DBM::Deep::Hash=HASH(0xb754850) retrieved. (this is the first_key - which points to a hash of albums by that Artist) Can't call method "get_next_key" on an undefined value at /usr/share/perl5/vendor_perl/DBM/Deep/Engine.pm line 258. at /usr/share/perl5/vendor_perl/DBM/Deep/Engine.pm line 258. DBM::Deep::Engine::get_next_key('DBM::Deep::Engine::File=HASH(0xa4ea3c0)', 'DBM::Deep::Hash=HASH(0xb754520)', 'Alice In Chains') called at /usr/share/perl5/vendor_perl/DBM/Deep/Hash.pm line 97 DBM::Deep::Hash::NEXTKEY('DBM::Deep::Hash=HASH(0xa652b58)', 'Alice In Chains') called at /usr/share/perl5/vendor_perl/DBM/Deep/Hash.pm line 107 DBM::Deep::Hash::next_key('DBM::Deep::Hash=HASH(0xa652b58)', 'Alice In Chains') called at CecilMods/Music.pm line 637 Music::generate_ql_artists('Music=HASH(0x9b1f1a0)') called at CecilMods/Music.pm line 859 Music::scanmediadir('Music=HASH(0x9b1f1a0)') called at musictest.pl line 22 Debugged program terminated. Use q to quit or R to restart, use o inhibit_exit to avoid stopping after program termination, h q, h R or h o to get additional info. DB<1> q [jon@localhost CaravanCoding]$