Skip to content
  • Mark Andrews's avatar
    Pause dbiterator ealier to prevent lock-order-inversion · fe72a28e
    Mark Andrews authored
    WARNING: ThreadSanitizer: lock-order-inversion (potential deadlock)
      Cycle in lock order graph: M1 (0x000000000000) => M2 (0x000000000000) => M1
    
      Mutex M2 acquired here while holding mutex M1 in thread T1:
        #0 pthread_rwlock_rdlock <null>
        #1 isc_rwlock_lock lib/isc/rwlock.c:48:3
        #2 findnodeintree lib/dns/rbtdb.c:2877:2
        #3 findnode lib/dns/rbtdb.c:2941:10
        #4 dns_db_findnode lib/dns/db.c:439:11
        #5 resume_addnsec3chain lib/dns/zone.c:3776:11
        #6 rss_post lib/dns/zone.c:20659:3
        #7 setnsec3param lib/dns/zone.c:20471:3
        #8 dispatch lib/isc/task.c:1152:7
        #9 run lib/isc/task.c:1344:2
    
      Mutex M1 previously acquired by the same thread here:
        #0 pthread_mutex_lock <null>
        #1 rss_post lib/dns/zone.c:20658:3
        #2 setnsec3param lib/dns/zone.c:20471:3
        #3 dispatch lib/isc/task.c:1152:7
        #4 run lib/isc/task.c:1344:2
    
      Mutex M1 acquired here while holding mutex M2 in thread T2:
        #0 pthread_mutex_lock <null>
        #1 zone_nsec3chain lib/dns/zone.c:8666:5
        #2 zone_maintenance lib/dns/zone.c:11063:4
        #3 zone_timer lib/dns/zone.c:14098:2
        #4 dispatch lib/isc/task.c:1152:7
        #5 run lib/isc/task.c:1344:2
    
      Mutex M2 previously acquired by the same thread here:
        #0 pthread_rwlock_rdlock <null>
        #1 isc_rwlock_lock lib/isc/rwlock.c:48:3
        #2 resume_iteration lib/dns/rbtdb.c:9357:2
        #3 dbiterator_next lib/dns/rbtdb.c:9647:3
        #4 dns_dbiterator_next lib/dns/dbiterator.c:87:10
        #5 zone_nsec3chain lib/dns/zone.c:8656:13
        #6 zone_maintenance lib/dns/zone.c:11063:4
        #7 zone_timer lib/dns/zone.c:14098:2
        #8 dispatch lib/isc/task.c:1152:7
        #9 run lib/isc/task.c:1344:2
    fe72a28e