# Buggy code
def acquire_read(self, timeout=_default_timeout):
    """Acquires a recursive, shared lock for reading.

    Read and write locks can be acquired and released in arbitrary
    order, but the POSIX lock is held until all local read and
    write locks are released.

    Returns True if it is the first acquire and actually acquires
    the POSIX lock, False if it is a nested transaction.

    """
    if self._reads == 0 and self._writes == 0:
        self._lock(fcntl.LOCK_SH, timeout)  # can raise LockError.
        self._reads += 1
        return True
    else:
        self._reads += 1
        return False


# Traceback (KeyError)
==> Installing cactusext
==> openmpi is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/openmpi-2.0.0-5l3pomaqonrx3phvbm4kblzsms56ljtj
==> hwloc is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/hwloc-1.11.3-xgdwohjb2o26uftzaqtcmwf2ejxlhidw
==> git is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/git-2.8.1-jh72meyfuritl2wexqmckrshmufe7az4
==> papi is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/papi-5.4.3-tnovpyennp4cerqns4xnfscfvl6d3zlz
==> hdf5-blosc is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/hdf5-blosc-master-6m7xtyqubxsb2merc36i2oyhtdvno3zp
==> lmod is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/lmod-6.4.1-i2xu3l63aipam7bdlu3ig4eriqtjnbbd
==> hdf5 is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/hdf5-1.10.0-patch1-jfa4zar7ysebuadia7zlhoebrlaeo5lv
==> python is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/python-2.7.11-y6bfneoxof25qt6wgdsbfsra62grfdnz
==> lua is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/lua-5.3.2-xe6niqb4cwgkdpq33qjoi3rby3vcdnew
==> fftw is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/fftw-3.3.4-ojokm7aahpro46e4tvoqgsc57lzbfdum
==> openssl is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/openssl-1.0.2h-ookfh4fsbv5ijqjsewerc5vvf4hzfme6
==> julia is already installed in /home/ux452368/comet/src/spack/opt/spack/linux-centos6-x86_64/gcc-6.1.0-spack/julia-master-bzqdzwekzl3geaeyuexssnelbnwfiwsf
Traceback (most recent call last):
File "/home/ux452368/comet/src/spack/bin/spack", line 179, in <module>
main()
File "/home/ux452368/comet/src/spack/bin/spack", line 157, in main
return_val = command(parser, args)
File "/home/ux452368/comet/src/spack/lib/spack/spack/cmd/install.py", line 91, in install
explicit=True)
File "/home/ux452368/comet/src/spack/lib/spack/spack/package.py", line 943, in do_install
run_tests=run_tests)
File "/home/ux452368/comet/src/spack/lib/spack/spack/package.py", line 1096, in do_install_dependencies
dep.package.do_install(**kwargs)
File "/home/ux452368/comet/src/spack/lib/spack/spack/package.py", line 925, in do_install
rec = spack.installed_db.get_record(self.spec)
File "/home/ux452368/comet/src/spack/lib/spack/spack/database.py", line 76, in converter
return function(self, spec_like, *args, **kwargs)
File "/home/ux452368/comet/src/spack/lib/spack/spack/database.py", line 461, in get_record
key = self._get_matching_spec_key(spec, **kwargs)
File "/home/ux452368/comet/src/spack/lib/spack/spack/database.py", line 456, in _get_matching_spec_key
raise KeyError("No such spec in database! %s" % spec)
KeyError: 'No such spec in database! julia@master%gcc@6.1.0-spack+binutils~cxx+hdf5+mpi~plot~python arch=linux-centos6-x86_64^binutils@2.25%gcc@6.1.0-spack+gold~krellpatch~libiberty arch=linux-centos6-x86_64^bzip2@1.0.6%gcc@6.1.0-spack arch=linux-centos6-x86_64^cmake@3.5.2%gcc@6.1.0-spack~doc+ncurses+openssl~qt arch=linux-centos6-x86_64^curl@7.49.1%gcc@6.1.0-spack arch=linux-centos6-x86_64^expat@2.1.0%gcc@6.1.0-spack arch=linux-centos6-x86_64^git@2.8.1%gcc@6.1.0-spack arch=linux-centos6-x86_64^hdf5@1.10.0-patch1%gcc@6.1.0-spack+cxx~debug+fortran+mpi+shared~szip~threadsafe arch=linux-centos6-x86_64^hwloc@1.11.3%gcc@6.1.0-spack arch=linux-centos6-x86_64^libpciaccess@0.13.4%gcc@6.1.0-spack arch=linux-centos6-x86_64^libsigsegv@2.10%gcc@6.1.0-spack arch=linux-centos6-x86_64^m4@1.4.17%gcc@6.1.0-spack+sigsegv arch=linux-centos6-x86_64^ncurses@6.0%gcc@6.1.0-spack arch=linux-centos6-x86_64^openmpi@2.0.0%gcc@6.1.0-spack~mxm~pmi~psm~psm2~slurm~sqlite3~thread_multiple~tm+verbs+vt arch=linux-centos6-x86_64^openssl@1.0.2h%gcc@6.1.0-spack arch=linux-centos6-x86_64^python@2.7.11%gcc@6.1.0-spack~ucs4 arch=linux-centos6-x86_64^readline@6.3%gcc@6.1.0-spack arch=linux-centos6-x86_64^sqlite@3.8.5%gcc@6.1.0-spack arch=linux-centos6-x86_64^zlib@1.2.8%gcc@6.1.0-spack arch=linux-centos6-x86_64'

# Fixed code
def acquire_read(self, timeout=_default_timeout):
    """Acquires a recursive, shared lock for reading.

    Read and write locks can be acquired and released in arbitrary
    order, but the POSIX lock is held until all local read and
    write locks are released.

    Returns True if it is the first acquire and actually acquires
    the POSIX lock, False if it is a nested transaction.

    """
    if self._reads == 0 and self._writes == 0:
        tty.debug(
            "READ LOCK: {0.path}[{0._start}:{0._length}] [Acquiring]".format(self)
        )
        self._lock(fcntl.LOCK_SH, timeout=timeout)  # can raise LockError.
        self._reads += 1
        return True
    else:
        self._reads += 1
        return False