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

ntyni pushed a commit to branch master
in repository libur-perl.

commit 99393cc1f8670c73900a352a9c060985d0fd0d21
Author: Niko Tyni <nt...@debian.org>
Date:   Thu Sep 22 22:33:50 2016 +0300

    Fix UR::DataSource::File breakage with reused memory locations
    
    Closes: #834914
---
 ...es-can-be-re-used-use-a-serial-number-ins.patch | 87 ++++++++++++++++++++++
 debian/patches/series                              |  1 +
 2 files changed, 88 insertions(+)

diff --git 
a/debian/patches/0001-Ref-addresses-can-be-re-used-use-a-serial-number-ins.patch
 
b/debian/patches/0001-Ref-addresses-can-be-re-used-use-a-serial-number-ins.patch
new file mode 100644
index 0000000..4d13029
--- /dev/null
+++ 
b/debian/patches/0001-Ref-addresses-can-be-re-used-use-a-serial-number-ins.patch
@@ -0,0 +1,87 @@
+From c4e0046aa79b619032c9e4364bb779fe5bce9e58 Mon Sep 17 00:00:00 2001
+From: Anthony Brummett <brumm...@gmail.com>
+Date: Mon, 19 Sep 2016 10:10:41 -0500
+Subject: [PATCH] Ref addresses can be re-used, use a serial number instead
+
+In some cases, the refaddr of the generated iterator code ref can be recycled
+between different get() instances.  When that happens, the code thinks it's
+within the same get() and neglects to reset the file position with seek().
+
+Some perl builds seem to use smaller address spaces than others, judging on
+the size of a refaddr.  Maybe it is just more likely to happen on builds
+with smaller address spaces.  For example:
+    perl -e 'my $a = \1; print "$a\n"'
+    OS X: SCALAR(0x7fd852825dc8)
+    Ubuntu: SCALAR(0x27fb958)
+Even though they're build 64-bit perls with the same ptrsize.
+
+This fixes #126
+
+Bug-Debian: https://bugs.debian.org/834914
+Bug: https://github.com/genome/UR/issues/126
+Origin: upstream, 
https://github.com/genome/UR/commit/c4e0046aa79b619032c9e4364bb779fe5bce9e58
+
+---
+ lib/UR/DataSource/File.pm | 11 +++++------
+ 1 file changed, 5 insertions(+), 6 deletions(-)
+
+diff --git a/lib/UR/DataSource/File.pm b/lib/UR/DataSource/File.pm
+index daf4422..ac4aab4 100644
+--- a/lib/UR/DataSource/File.pm
++++ b/lib/UR/DataSource/File.pm
+@@ -558,7 +558,7 @@ sub _comparator_for_operator_and_property {
+     }
+ }
+         
+-
++my $iterator_serial = 0;
+ sub create_iterator_closure_for_rule {
+     my($self,$rule) = @_;
+ 
+@@ -698,7 +698,7 @@ sub create_iterator_closure_for_rule {
+         UR::DBI->sql_fh->printf("\nFILE: %s\nFILTERS %s\n\n", $self->server, 
$filter_list);
+     }
+ 
+-    $self->{'_last_read_fingerprint'} ||= '';
++    $self->{'_last_read_serial'} ||= '';
+ 
+     my $record_separator = $self->record_separator;
+     my $cache_slot = $self->_allocate_offset_cache_slot();
+@@ -709,7 +709,7 @@ sub create_iterator_closure_for_rule {
+     my $lines_matched = 0;
+ 
+     my $fh;  # File handle we'll be reading from
+-    my $read_fingerprint;   # The stringified version of $iterator (to avoid 
circular references), filled in below
++    my $this_iterator_serial = $iterator_serial++;
+     my $iterator = sub {
+ 
+         unless (ref($fh)) {
+@@ -725,7 +725,7 @@ sub create_iterator_closure_for_rule {
+             $monitor_printed_first_fetch = 1;
+         }
+ 
+-        if ($self->{'_last_read_fingerprint'} ne $read_fingerprint) {
++        if ($self->{'_last_read_serial'} ne $this_iterator_serial) {
+             UR::DBI->sql_fh->printf("FILE: Resetting file position to 
$file_pos\n") if $ENV{'UR_DBI_MONITOR_SQL'};
+             # The last read was from a different request, reset the position
+             $fh->seek($file_pos,0);
+@@ -737,7 +737,7 @@ sub create_iterator_closure_for_rule {
+             }
+             $file_pos = $self->_file_position();
+ 
+-            $self->{'_last_read_fingerprint'} = $read_fingerprint;
++            $self->{'_last_read_serial'} = $this_iterator_serial;
+         }
+ 
+         local $/;   # Make sure some wise guy hasn't changed this out from 
under us
+@@ -848,7 +848,6 @@ sub create_iterator_closure_for_rule {
+             return $next_candidate_row;
+         }
+     }; # end sub $iterator
+-    $read_fingerprint = $iterator . '';
+ 
+     
Sub::Name::subname('UR::DataSource::File::__datasource_iterator(closure)__', 
$iterator);
+ 
+-- 
+2.9.3
+
diff --git a/debian/patches/series b/debian/patches/series
index 3d0bc4b..ac92cd3 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,3 @@
 spelling.patch
 Honour-SOURCE_DATE_EPOCH-for-embedded-timestamp-in-genera.patch
+0001-Ref-addresses-can-be-re-used-use-a-serial-number-ins.patch

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

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to