Skip to content

Commit bfa5a41

Browse files
committed
Mark callback functions used from C as nogil and (mostly) noexcept
Prevents "Casting a GIL-requiring function into a nogil function" warnings.
1 parent 89380af commit bfa5a41

File tree

1 file changed

+17
-45
lines changed

1 file changed

+17
-45
lines changed

pysam/libcalignmentfile.pyx

Lines changed: 17 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2320,38 +2320,30 @@ cdef class IteratorRowSelection(IteratorRow):
23202320
raise IOError(read_failure_reason(ret))
23212321

23222322

2323-
cdef int __advance_nofilter(void *data, bam1_t *b):
2323+
cdef int __advance_nofilter(void *data, bam1_t *b) noexcept nogil:
23242324
'''advance without any read filtering.
23252325
'''
23262326
cdef __iterdata * d = <__iterdata*>data
2327-
cdef int ret
2328-
with nogil:
2329-
ret = sam_itr_next(d.htsfile, d.iter, b)
2330-
return ret
2327+
return sam_itr_next(d.htsfile, d.iter, b)
23312328

23322329

2333-
cdef int __advance_raw_nofilter(void *data, bam1_t *b):
2330+
cdef int __advance_raw_nofilter(void *data, bam1_t *b) noexcept nogil:
23342331
'''advance (without iterator) without any read filtering.
23352332
'''
23362333
cdef __iterdata * d = <__iterdata*>data
2337-
cdef int ret
2338-
with nogil:
2339-
ret = sam_read1(d.htsfile, d.header, b)
2340-
return ret
2334+
return sam_read1(d.htsfile, d.header, b)
23412335

23422336

2343-
cdef int __advance_all(void *data, bam1_t *b):
2337+
cdef int __advance_all(void *data, bam1_t *b) noexcept nogil:
23442338
'''only use reads for pileup passing basic filters such as
23452339
23462340
BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, BAM_FDUP
23472341
'''
23482342

23492343
cdef __iterdata * d = <__iterdata*>data
2350-
cdef mask = BAM_FUNMAP | BAM_FSECONDARY | BAM_FQCFAIL | BAM_FDUP
23512344
cdef int ret
23522345
while 1:
2353-
with nogil:
2354-
ret = sam_itr_next(d.htsfile, d.iter, b)
2346+
ret = sam_itr_next(d.htsfile, d.iter, b)
23552347
if ret < 0:
23562348
break
23572349
if b.core.flag & d.flag_filter:
@@ -2360,7 +2352,7 @@ cdef int __advance_all(void *data, bam1_t *b):
23602352
return ret
23612353

23622354

2363-
cdef int __advance_raw_all(void *data, bam1_t *b):
2355+
cdef int __advance_raw_all(void *data, bam1_t *b) noexcept nogil:
23642356
'''only use reads for pileup passing basic filters such as
23652357
23662358
BAM_FUNMAP, BAM_FSECONDARY, BAM_FQCFAIL, BAM_FDUP
@@ -2369,8 +2361,7 @@ cdef int __advance_raw_all(void *data, bam1_t *b):
23692361
cdef __iterdata * d = <__iterdata*>data
23702362
cdef int ret
23712363
while 1:
2372-
with nogil:
2373-
ret = sam_read1(d.htsfile, d.header, b)
2364+
ret = sam_read1(d.htsfile, d.header, b)
23742365
if ret < 0:
23752366
break
23762367
if b.core.flag & d.flag_filter:
@@ -2379,7 +2370,7 @@ cdef int __advance_raw_all(void *data, bam1_t *b):
23792370
return ret
23802371

23812372

2382-
cdef int __advance_samtools(void * data, bam1_t * b):
2373+
cdef int __advance_samtools(void * data, bam1_t *b) nogil:
23832374
'''advance using same filter and read processing as in
23842375
the samtools pileup.
23852376
'''
@@ -2388,8 +2379,7 @@ cdef int __advance_samtools(void * data, bam1_t * b):
23882379
cdef int q
23892380

23902381
while 1:
2391-
with nogil:
2392-
ret = sam_itr_next(d.htsfile, d.iter, b) if d.iter else sam_read1(d.htsfile, d.header, b)
2382+
ret = sam_itr_next(d.htsfile, d.iter, b) if d.iter else sam_read1(d.htsfile, d.header, b)
23932383
if ret < 0:
23942384
break
23952385
if b.core.flag & d.flag_filter:
@@ -2402,13 +2392,7 @@ cdef int __advance_samtools(void * data, bam1_t * b):
24022392
if d.seq != NULL:
24032393
free(d.seq)
24042394
d.tid = b.core.tid
2405-
with nogil:
2406-
d.seq = faidx_fetch_seq(
2407-
d.fastafile,
2408-
d.header.target_name[d.tid],
2409-
0, MAX_POS,
2410-
&d.seq_len)
2411-
2395+
d.seq = faidx_fetch_seq(d.fastafile, d.header.target_name[d.tid], 0, MAX_POS, &d.seq_len)
24122396
if d.seq == NULL:
24132397
raise ValueError(
24142398
"reference sequence for '{}' (tid={}) not found".format(
@@ -2560,19 +2544,13 @@ cdef class IteratorColumn:
25602544

25612545
if self.stepper is None or self.stepper == "all":
25622546
with nogil:
2563-
self.pileup_iter = bam_mplp_init(1,
2564-
<bam_plp_auto_f>&__advance_all,
2565-
data)
2547+
self.pileup_iter = bam_mplp_init(1, __advance_all, data)
25662548
elif self.stepper == "nofilter":
25672549
with nogil:
2568-
self.pileup_iter = bam_mplp_init(1,
2569-
<bam_plp_auto_f>&__advance_nofilter,
2570-
data)
2550+
self.pileup_iter = bam_mplp_init(1, __advance_nofilter, data)
25712551
elif self.stepper == "samtools":
25722552
with nogil:
2573-
self.pileup_iter = bam_mplp_init(1,
2574-
<bam_plp_auto_f>&__advance_samtools,
2575-
data)
2553+
self.pileup_iter = bam_mplp_init(1, <bam_plp_auto_f>__advance_samtools, data)
25762554
else:
25772555
raise ValueError(
25782556
"unknown stepper option `%s` in IteratorColumn" % self.stepper)
@@ -2609,19 +2587,13 @@ cdef class IteratorColumn:
26092587

26102588
if self.stepper is None or self.stepper == "all":
26112589
with nogil:
2612-
self.pileup_iter = bam_mplp_init(1,
2613-
<bam_plp_auto_f>&__advance_raw_all,
2614-
data)
2590+
self.pileup_iter = bam_mplp_init(1, __advance_raw_all, data)
26152591
elif self.stepper == "nofilter":
26162592
with nogil:
2617-
self.pileup_iter = bam_mplp_init(1,
2618-
<bam_plp_auto_f>&__advance_raw_nofilter,
2619-
data)
2593+
self.pileup_iter = bam_mplp_init(1, __advance_raw_nofilter, data)
26202594
elif self.stepper == "samtools":
26212595
with nogil:
2622-
self.pileup_iter = bam_mplp_init(1,
2623-
<bam_plp_auto_f>&__advance_samtools,
2624-
data)
2596+
self.pileup_iter = bam_mplp_init(1, <bam_plp_auto_f>__advance_samtools, data)
26252597
else:
26262598
raise ValueError(
26272599
"unknown stepper option `%s` in IteratorColumn" % self.stepper)

0 commit comments

Comments
 (0)