Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

memcached #40

Open
sim642 opened this issue Sep 9, 2022 · 7 comments
Open

memcached #40

sim642 opened this issue Sep 9, 2022 · 7 comments
Labels
goblint Goblint-specific problem project Project to analyze

Comments

@sim642
Copy link
Member

sim642 commented Sep 9, 2022

https://github.com/memcached/memcached

Initial attempt

Goblint version: heads/master-0-ge223b4f36-dirty.

Checked out git tag 1.6.17 and executed:

./autogen.sh
./configure
bear -- make
goblint -v compile_commands.json

Crashes due to parsing errors in intrinsics headers:

Frontc is parsing /home/simmo/Desktop/memcached/.goblint/preprocessed/hash.i
Converting CABS->CIL
/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:120: Unimplemented: doInit: unexpected NEXT_INIT for float __attribute__((__vector_size__(16),
__may_alias__))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:887: Unimplemented: doInit: unexpected NEXT_INIT for float __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:894: Unimplemented: doInit: unexpected NEXT_INIT for float __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:949: Unimplemented: doInit: unexpected NEXT_INIT for float __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:956: Unimplemented: doInit: unexpected NEXT_INIT for float __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:963: Error: Expecting a pointer type in index:
 t1=TNamed(__v4sf, TFloat(float,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:969: Error: Expecting a pointer type in index:
 t1=TNamed(__v4sf, TFloat(float,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:1014: Unimplemented: doInit: unexpected NEXT_INIT for int __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:1174: Unimplemented: doInit: unexpected NEXT_INIT for long long __attribute__((__vector_size__(16)))  

Error in doStatement (GoblintCil__Errormsg.Error)
/usr/lib/gcc/x86_64-linux-gnu/11/include/xmmintrin.h:1175: Unimplemented: doInit: unexpected NEXT_INIT for long long __attribute__((__vector_size__(16)))  

Error in doStatement (GoblintCil__Errormsg.Error)
/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:68: Unimplemented: doInit: unexpected NEXT_INIT for double __attribute__((__vector_size__(16),
__may_alias__))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:75: Unimplemented: doInit: unexpected NEXT_INIT for double __attribute__((__vector_size__(16),
__may_alias__))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:88: Unimplemented: doInit: unexpected NEXT_INIT for double __attribute__((__vector_size__(16),
__may_alias__))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:95: Unimplemented: doInit: unexpected NEXT_INIT for double __attribute__((__vector_size__(16),
__may_alias__))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:110: Unimplemented: doInit: unexpected NEXT_INIT for double __attribute__((__vector_size__(16),
__may_alias__))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:117: Unimplemented: doInit: unexpected NEXT_INIT for long long __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:180: Error: Expecting a pointer type in index:
 t1=TNamed(__v2df, TFloat(double,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:186: Error: Expecting a pointer type in index:
 t1=TNamed(__v2df, TFloat(double,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:199: Error: Expecting a pointer type in index:
 t1=TNamed(__v2df, TFloat(double,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:234: Error: Expecting a pointer type in index:
 t1=TNamed(__v2di___0, TInt(long long,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:241: Error: Expecting a pointer type in index:
 t1=TNamed(__v2di___0, TInt(long long,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:592: Unimplemented: doInit: unexpected NEXT_INIT for long long __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:604: Unimplemented: doInit: unexpected NEXT_INIT for int __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:611: Unimplemented: doInit: unexpected NEXT_INIT for short __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:621: Unimplemented: doInit: unexpected NEXT_INIT for char __attribute__((__vector_size__(16)))  

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:746: Error: Expecting a pointer type in index:
 t1=TNamed(__v2di___0, TInt(long long,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:758: Error: Expecting a pointer type in index:
 t1=TNamed(__v4si, TInt(int,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:764: Error: Expecting a pointer type in index:
 t1=TNamed(__v8hi, TInt(short,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:770: Error: Expecting a pointer type in index:
 t1=TNamed(__v2di___0, TInt(long long,  __attribute__((__vector_size__(16))) ), )
t2=TInt(int, )

/usr/lib/gcc/x86_64-linux-gnu/11/include/emmintrin.h:797: Unimplemented: doInit: unexpected NEXT_INIT for int __attribute__((__vector_size__(16)))  

Frontc is parsing /home/simmo/Desktop/memcached/.goblint/preprocessed/jenkins_hash.i
Error: There were parsing errors in /home/simmo/Desktop/memcached/.goblint/preprocessed/jenkins_hash.i
Fatal error: exception GoblintCil__Errormsg.Error
Raised at GoblintCil__Errormsg.s in file "src/ocamlutil/errormsg.ml" (inlined), line 49, characters 17-28
Called from GoblintCil__Frontc.parse_to_cabs in file "src/frontc/frontc.ml", line 123, characters 4-57
Called from GoblintCil__Frontc.parse_helper in file "src/frontc/frontc.ml", line 256, characters 13-32
Called from GoblintCil__Frontc.parse in file "src/frontc/frontc.ml" (inlined), line 264, characters 32-55
Called from Goblint_lib__Cilfacade.parse in file "src/util/cilfacade.ml", line 30, characters 2-44
Called from BatList.map.loop in file "src/batList.mlv", line 237, characters 28-33
Called from BatList.map in file "src/batList.mlv", line 240, characters 4-12
Called from Goblint_lib__Maingoblint.preprocess_parse_merge in file "src/maingoblint.ml", line 392, characters 2-45
Called from Stdlib__Fun.protect in file "fun.ml", line 33, characters 8-15
Re-raised at Stdlib__Fun.protect in file "fun.ml", line 38, characters 6-52
Called from CamlinternalLazy.force_lazy_block in file "camlinternalLazy.ml", line 31, characters 17-27
Re-raised at CamlinternalLazy.force_lazy_block in file "camlinternalLazy.ml", line 36, characters 4-11
Called from Dune__exe__Goblint.main in file "src/goblint.ml", line 32, characters 17-32
Called from Stdlib.at_exit.new_exit in file "stdlib.ml", line 560, characters 59-63
Called from Stdlib.do_at_exit in file "stdlib.ml" (inlined), line 566, characters 20-61
Called from Std_exit in file "std_exit.ml", line 18, characters 8-20
@sim642 sim642 added goblint Goblint-specific problem project Project to analyze labels Sep 9, 2022
@sim642
Copy link
Member Author

sim642 commented Oct 4, 2023

The vectorization and intrinsics only seem to be used by the vendored xxHash library that provides alternative intrisincs-free implementations that we could analyze instead.

@karoliineh
Copy link
Member

karoliineh commented Oct 5, 2023

On tag 1.6.21:

./autogen.sh
./configure
bear -- make
  1. Commented out the following code on lines 2583-2595 in xxhash.h as there actually is an option XXH_VECTOR to not use SSE2 which uses the implementation that has __vector_size__ but this block overrides this option if uncommented:
#if defined(__GNUC__)
#  if defined(__AVX2__)
#    include <immintrin.h>
#  elif defined(__SSE2__)
#    include <emmintrin.h>
#  elif defined(__ARM_NEON__) || defined(__ARM_NEON)
#    define inline __inline__  /* circumvent a clang bug */
#    include <arm_neon.h>
#    undef inline
#  endif
# elif defined(_MSC_VER)
#  include <intrin.h>
#endif

With option --set pre.cppflags[+] "-DXXH_VECTOR=0" Goblint is able to parse and analyze.

goblint compile_commands.json --conf goblint.json
With this conf
{
    "ana": {
        "activated": ["base", "mallocWrapper", "escape", "mutex", "mutexEvents", "access", "race", "assert"],
        "base": {
            "privatization": "none",
            "context": {
                "non-ptr": false
            }
        },
        "thread": {
            "domain": "plain",
            "include-node": false
        },
        "race": {
            "free": false
        }
    },
    "sem": {
        "unknown_function": {
            "spawn": false,
            "invalidate": {
                "globals": false
            }
        }
    },
    "exp": {
        "earlyglobs": true
    },
    "warn": {
        "assert": false,
        "behavior": false,
        "integer": false,
        "cast": false,
        "race": true,
        "deadcode": false,
        "analyzer": false,
        "unsound": true,
        "program": false,
        "imprecise": true,
        "unknown": false,
        "error": true,
        "warning": true,
        "info": false,
        "debug": false,
        "success": false
    },
    "pre": {
        "cppflags": [
            "-DXXH_VECTOR=0"
        ]
    }
}

analyzed for 2h13min, produced an output file of 1.39GB with 775 race warnings 🙃. First time I tried with the large-programs.json conf and then it ran for 1h17min but I didn't think to output to a file so I don't know how many warnings that conf produced.

Also, the race warnings are awfully long due to the locksets, e.g.:

[Warning][Race] Memory location (struct __anonstruct_item_hdr_376883561).page_version (race with conf. 100):
  write with [] (conf. 100)  (exp: & hdr->page_version) (storage.c:550:17-550:52)
  read with [] (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], lru_locks[def_exc:252], lru_locks[def_exc:253], lru_locks[def_exc:254], maintenance_lock, lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], lru_locks[def_exc:252], lru_locks[def_exc:253], lru_locks[def_exc:254], lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], lru_locks[def_exc:252], lru_locks[def_exc:253], maintenance_lock, lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], lru_locks[def_exc:252], lru_locks[def_exc:253], lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], lru_locks[def_exc:252], maintenance_lock, lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], lru_locks[def_exc:252], lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], maintenance_lock, lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], lru_locks[def_exc:251], lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)
  read with lock:{lru_locks[def_exc:1], lru_locks[def_exc:2], lru_locks[def_exc:3], lru_locks[def_exc:4], lru_locks[def_exc:5], lru_locks[def_exc:6], lru_locks[def_exc:7], lru_locks[def_exc:8], lru_locks[def_exc:9], lru_locks[def_exc:10], lru_locks[def_exc:11], lru_locks[def_exc:12], lru_locks[def_exc:13], lru_locks[def_exc:14], lru_locks[def_exc:15], lru_locks[def_exc:16], lru_locks[def_exc:17], lru_locks[def_exc:18], lru_locks[def_exc:19], lru_locks[def_exc:20], lru_locks[def_exc:21], lru_locks[def_exc:22], lru_locks[def_exc:23], lru_locks[def_exc:24], lru_locks[def_exc:25], lru_locks[def_exc:26], lru_locks[def_exc:27], lru_locks[def_exc:28], lru_locks[def_exc:29], lru_locks[def_exc:30], lru_locks[def_exc:31], lru_locks[def_exc:32], lru_locks[def_exc:33], lru_locks[def_exc:34], lru_locks[def_exc:35], lru_locks[def_exc:36], lru_locks[def_exc:37], lru_locks[def_exc:38], lru_locks[def_exc:39], lru_locks[def_exc:40], lru_locks[def_exc:41], lru_locks[def_exc:42], lru_locks[def_exc:43], lru_locks[def_exc:44], lru_locks[def_exc:45], lru_locks[def_exc:46], lru_locks[def_exc:47], lru_locks[def_exc:48], lru_locks[def_exc:49], lru_locks[def_exc:50], lru_locks[def_exc:51], lru_locks[def_exc:52], lru_locks[def_exc:53], lru_locks[def_exc:54], lru_locks[def_exc:55], lru_locks[def_exc:56], lru_locks[def_exc:57], lru_locks[def_exc:58], lru_locks[def_exc:59], lru_locks[def_exc:60], lru_locks[def_exc:61], lru_locks[def_exc:62], lru_locks[def_exc:63], lru_locks[def_exc:64], lru_locks[def_exc:65], lru_locks[def_exc:66], lru_locks[def_exc:67], lru_locks[def_exc:68], lru_locks[def_exc:69], lru_locks[def_exc:70], lru_locks[def_exc:71], lru_locks[def_exc:72], lru_locks[def_exc:73], lru_locks[def_exc:74], lru_locks[def_exc:75], lru_locks[def_exc:76], lru_locks[def_exc:77], lru_locks[def_exc:78], lru_locks[def_exc:79], lru_locks[def_exc:80], lru_locks[def_exc:81], lru_locks[def_exc:82], lru_locks[def_exc:83], lru_locks[def_exc:84], lru_locks[def_exc:85], lru_locks[def_exc:86], lru_locks[def_exc:87], lru_locks[def_exc:88], lru_locks[def_exc:89], lru_locks[def_exc:90], lru_locks[def_exc:91], lru_locks[def_exc:92], lru_locks[def_exc:93], lru_locks[def_exc:94], lru_locks[def_exc:95], lru_locks[def_exc:96], lru_locks[def_exc:97], lru_locks[def_exc:98], lru_locks[def_exc:99], lru_locks[def_exc:100], lru_locks[def_exc:101], lru_locks[def_exc:102], lru_locks[def_exc:103], lru_locks[def_exc:104], lru_locks[def_exc:105], lru_locks[def_exc:106], lru_locks[def_exc:107], lru_locks[def_exc:108], lru_locks[def_exc:109], lru_locks[def_exc:110], lru_locks[def_exc:111], lru_locks[def_exc:112], lru_locks[def_exc:113], lru_locks[def_exc:114], lru_locks[def_exc:115], lru_locks[def_exc:116], lru_locks[def_exc:117], lru_locks[def_exc:118], lru_locks[def_exc:119], lru_locks[def_exc:120], lru_locks[def_exc:121], lru_locks[def_exc:122], lru_locks[def_exc:123], lru_locks[def_exc:124], lru_locks[def_exc:125], lru_locks[def_exc:126], lru_locks[def_exc:127], lru_locks[def_exc:128], lru_locks[def_exc:129], lru_locks[def_exc:130], lru_locks[def_exc:131], lru_locks[def_exc:132], lru_locks[def_exc:133], lru_locks[def_exc:134], lru_locks[def_exc:135], lru_locks[def_exc:136], lru_locks[def_exc:137], lru_locks[def_exc:138], lru_locks[def_exc:139], lru_locks[def_exc:140], lru_locks[def_exc:141], lru_locks[def_exc:142], lru_locks[def_exc:143], lru_locks[def_exc:144], lru_locks[def_exc:145], lru_locks[def_exc:146], lru_locks[def_exc:147], lru_locks[def_exc:148], lru_locks[def_exc:149], lru_locks[def_exc:150], lru_locks[def_exc:151], lru_locks[def_exc:152], lru_locks[def_exc:153], lru_locks[def_exc:154], lru_locks[def_exc:155], lru_locks[def_exc:156], lru_locks[def_exc:157], lru_locks[def_exc:158], lru_locks[def_exc:159], lru_locks[def_exc:160], lru_locks[def_exc:161], lru_locks[def_exc:162], lru_locks[def_exc:163], lru_locks[def_exc:164], lru_locks[def_exc:165], lru_locks[def_exc:166], lru_locks[def_exc:167], lru_locks[def_exc:168], lru_locks[def_exc:169], lru_locks[def_exc:170], lru_locks[def_exc:171], lru_locks[def_exc:172], lru_locks[def_exc:173], lru_locks[def_exc:174], lru_locks[def_exc:175], lru_locks[def_exc:176], lru_locks[def_exc:177], lru_locks[def_exc:178], lru_locks[def_exc:179], lru_locks[def_exc:180], lru_locks[def_exc:181], lru_locks[def_exc:182], lru_locks[def_exc:183], lru_locks[def_exc:184], lru_locks[def_exc:185], lru_locks[def_exc:186], lru_locks[def_exc:187], lru_locks[def_exc:188], lru_locks[def_exc:189], lru_locks[def_exc:190], lru_locks[def_exc:191], lru_locks[def_exc:192], lru_locks[def_exc:193], lru_locks[def_exc:194], lru_locks[def_exc:195], lru_locks[def_exc:196], lru_locks[def_exc:197], lru_locks[def_exc:198], lru_locks[def_exc:199], lru_locks[def_exc:200], lru_locks[def_exc:201], lru_locks[def_exc:202], lru_locks[def_exc:203], lru_locks[def_exc:204], lru_locks[def_exc:205], lru_locks[def_exc:206], lru_locks[def_exc:207], lru_locks[def_exc:208], lru_locks[def_exc:209], lru_locks[def_exc:210], lru_locks[def_exc:211], lru_locks[def_exc:212], lru_locks[def_exc:213], lru_locks[def_exc:214], lru_locks[def_exc:215], lru_locks[def_exc:216], lru_locks[def_exc:217], lru_locks[def_exc:218], lru_locks[def_exc:219], lru_locks[def_exc:220], lru_locks[def_exc:221], lru_locks[def_exc:222], lru_locks[def_exc:223], lru_locks[def_exc:224], lru_locks[def_exc:225], lru_locks[def_exc:226], lru_locks[def_exc:227], lru_locks[def_exc:228], lru_locks[def_exc:229], lru_locks[def_exc:230], lru_locks[def_exc:231], lru_locks[def_exc:232], lru_locks[def_exc:233], lru_locks[def_exc:234], lru_locks[def_exc:235], lru_locks[def_exc:236], lru_locks[def_exc:237], lru_locks[def_exc:238], lru_locks[def_exc:239], lru_locks[def_exc:240], lru_locks[def_exc:241], lru_locks[def_exc:242], lru_locks[def_exc:243], lru_locks[def_exc:244], lru_locks[def_exc:245], lru_locks[def_exc:246], lru_locks[def_exc:247], lru_locks[def_exc:248], lru_locks[def_exc:249], lru_locks[def_exc:250], maintenance_lock, lru_crawler_lock} (conf. 100)  (exp: & hdr->page_version) (storage.c:47:9-47:64)

@michael-schwarz
Copy link
Member

The locksets look a bit curious: Is it plausible that there a code paths which acquire 255 distinct locks and never release any of them?

@michael-schwarz
Copy link
Member

Other thing: It might be worth trying with at least a simple thread analysis: Maybe the first two accesses can be excluded based on MHP, and then the other ones would be fine.

@karoliineh
Copy link
Member

karoliineh commented Oct 10, 2023

I was able to isolate an example of why these awfully long locksets happen:

Example
#include <goblint.h>
#include <pthread.h>

/* Slab sizing definitions. */
#define POWER_SMALLEST 1
#define POWER_LARGEST 16 /* actual cap is 255 */
#define LARGEST_ID POWER_LARGEST
/* Locks for cache LRU operations */
pthread_mutex_t lru_locks[POWER_LARGEST];
static pthread_t item_crawler_tid;

int myglobal;

void memcached_thread_init(int nthreads, void *arg) {
    int i;
    for (i = 0; i < POWER_LARGEST; i++) {
        pthread_mutex_init(&lru_locks[i], NULL);
    }
}

void *item_crawler_thread(void *arg) {
    int i;
    for (i = POWER_SMALLEST; i < LARGEST_ID; i++) {
        pthread_mutex_lock(&lru_locks[i]);
        myglobal = myglobal + 1; // RACE!
    }
    return NULL;
}

int main(void) {
    int i;
    int num_threads = rand();
    memcached_thread_init(num_threads, NULL);
    pthread_create(&item_crawler_tid, NULL, item_crawler_thread, NULL);
    for (i = POWER_SMALLEST; i < LARGEST_ID; i++) {
        pthread_mutex_lock(&lru_locks[i]);
        myglobal = myglobal + 1; // RACE!
        pthread_mutex_unlock(&lru_locks[i]);
    }
    pthread_join(&item_crawler_tid, NULL);
    return 0;
}

It happens when one forgets to unlock a mutex in a loop. In memcached, there is a function where all unlockings are in different if clauses and two of those clauses do not have an unlock at all, so it might happen there. But it was a bit suspicious, why it didn't happen in a similarly constructed case, where in one branch the lock is released and the loop continues and in another branch the lock is not released:

void *item_crawler_thread(void *arg) {
    int i, r1, r2;
    for (i = POWER_SMALLEST; i < LARGEST_ID; i++) {
        pthread_mutex_lock(&lru_locks[i]);
        myglobal = myglobal + 1; // RACE!
        if (r1) {
             pthread_mutex_unlock(&lru_locks[i]);
             continue;
        }
        if (r2) {
             int x = 0;
        }
    }
    return NULL;
}

Also, we might want to add a warning similar to the one in mayLocks analysis, where we warn if the mutexAnalysis must-lockset is not empty when the thread returns to indicate that one might have forgotten to release those locks.

@sim642
Copy link
Member Author

sim642 commented Oct 10, 2023

The place where these locksets arise involves a loop with lots of different continue cases, so initially I thought there was an actual bug that one case forgot to unlock. But actually it seems fine and rather subtle:

            if (!active_crawler_mod.mod->needs_lock) {
                pthread_mutex_unlock(&lru_locks[i]);
            }

            active_crawler_mod.mod->eval(&active_crawler_mod, search, hv, i);

            if (hold_lock)
                item_trylock_unlock(hold_lock);
            if (active_crawler_mod.mod->needs_lock) {
                pthread_mutex_unlock(&lru_locks[i]);
            }

Depending on the value of the global active_crawler_mod.mod->needs_lock, lru_locks[i] is unlocked a bit earlier or later, but it's always unlocked. Since we can't refine globals, we don't know that it's impossible to skip both ifs.

So it's a weird combination of our imprecision on values (not refining globals) and precision on mutexes (path-sensitivity) that leads to such explosion. It doesn't have an easy solution though, because it boils down to goblint/analyzer#101. Path-sensitivity would need a proper widening that can widen growing cardinality of path sets like this. Currently there's no widening across path buckets.

@karoliineh
Copy link
Member

karoliineh commented Oct 12, 2023

Some more findings. I was curious how the analysis would behave when, instead of analyzing based on a compilation database, we would analyze a program that has been merged with CIL (similar to the Concrat benchmarks).

I merged the project with: goblint compile_commands.json --conf goblint.json --enable justcil > memcachedcil.c

Then ran Goblint with:

goblint compile_commands.json --conf examples/large-program.json
--set pre.cppflags[+] "-DXXH_VECTOR=0" --enable warn.deterministic
--disable sem.unknown_function.spawn --disable sem.unknown_function.invalidate.globals
|& tee nonmerged.txt

and

goblint memcachedcil.c --conf examples/large-program.json
--set pre.cppflags[+] "-DXXH_VECTOR=0" --enable warn.deterministic
--disable sem.unknown_function.spawn --disable sem.unknown_function.invalidate.globals
|& tee merged.txt

The analysis with the compilation database took 1h and 15 min, and the analysis on CIL merged took 1h and 3 min. There was no significant performance gain. However, it is a bit suspicious that there is a slightly different number of warnings.

non-merged merged
race warnings 806 814
deadcode warnings 610 608
deadcode warnings (branching) 112 258

Some of the differences can be since for analysis with compilation DB, there are many warnings of the following type:

/usr/include/stdio.h:856: Warning: The name obstack_vprintf is used for two distinct globals
/usr/include/pthread.h:276: Warning: The name pthread_equal is used for two distinct globals
/usr/include/unistd.h:371: Warning: The name read is used for two distinct globals
/usr/include/unistd.h:389: Warning: The name pread is used for two distinct globals

but analyzing the merged one does not have them. This might be that CIL actually renames these, and the latter could be more precise?


At the same time, @sim642 implemented an option not to track the indexes of locks, which made the analysis so much faster. The analysis for both runs was completed with 30sec 🤯. Although this option breaks one regression test, the number of warnings in this project stayed the same. A big win.


There are also a bunch of unknown functions, making the analysis imprecise and due to the time restrictions so far, I have only used a minimal set (the one in large-program conf) of analyses. I will now try and configure a bit to see how much we can decrease the number of warnings with easy stuff.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
goblint Goblint-specific problem project Project to analyze
Projects
None yet
Development

No branches or pull requests

3 participants