Skip to content

Commit

Permalink
Fix segfault on Darwin
Browse files Browse the repository at this point in the history
Ever since SQLite in Nixpkgs was updated to 3.8.0.2, Nix has randomly
segfaulted on Darwin:

  http://hydra.nixos.org/build/6175515
  http://hydra.nixos.org/build/6611038

It turns out that this is because the binary cache substituter somehow
ends up loading two versions of SQLite: the one in Nixpkgs and the
other from /usr/lib/libsqlite3.dylib.  It's not exactly clear why the
latter is loaded, but it appears to be because WWW::Curl indirectly loads
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation,
which in turn seems to load /usr/lib/libsqlite3.dylib.  This leads to
a segfault when Perl exits:

  #0  0x00000001010375f4 in sqlite3_finalize ()
  #1  0x000000010125806e in sqlite_st_destroy ()
  #2  0x000000010124bc30 in XS_DBD__SQLite__st_DESTROY ()
  #3  0x00000001001c8155 in XS_DBI_dispatch ()
  ...
  #14 0x0000000100023224 in perl_destruct ()
  #15 0x0000000100000d6a in main ()
  ...

The workaround is to explicitly load DBD::SQLite before WWW::Curl.
  • Loading branch information
edolstra committed Oct 24, 2013
1 parent 5bc41d7 commit 2d9bb56
Show file tree
Hide file tree
Showing 2 changed files with 2 additions and 0 deletions.
1 change: 1 addition & 0 deletions perl/lib/Nix/Manifest.pm
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package Nix::Manifest;

use strict;
use DBI;
use DBD::SQLite;
use Cwd;
use File::stat;
use File::Path;
Expand Down
1 change: 1 addition & 0 deletions scripts/download-from-binary-cache.pl.in
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#! @perl@ -w @perlFlags@

use DBI;
use DBD::SQLite;
use File::Basename;
use IO::Select;
use Nix::Config;
Expand Down

0 comments on commit 2d9bb56

Please sign in to comment.