• 
      

    Fix a threading-related crash in privacy consent recalculation.

    Review Request #13322 — Created Oct. 9, 2023 and submitted

    Information

    Review Board
    release-6.x

    Reviewers

    Under certain conditions, we recompute the privacy consent
    registrations. This can happen on thread startup or teardown, and
    occasionally, two threads end up interfering with each other's state.

    This happens because, when recomputing, an unregister is performed, and
    on a blank registry this will trigger a registry population, which then
    triggers a signal and another attempt at a recomputation, in the middle
    of an existing one. If this happens in multiple threads, it compounds
    the problem.

    When this happens, we can end up triggering a double register of the new
    consent requirements, which will crash.

    We now surround all this with a threading lock, and check for this in
    the signal handler to avoid triggering an extra recomputation.

    Unit tests pass.

    Consent requirements continue to work properly.

    Summary ID
    Fix a threading-related crash in privacy consent recalculation.
    Under certain conditions, we recompute the privacy consent registrations. This can happen on thread startup or teardown, and occasionally, two threads end up interfering with each other's state. This happens because, when recomputing, an unregister is performed, and on a blank registry this will trigger a registry population, which then triggers a signal and another attempt at a recomputation, in the middle of an existing one. If this happens in multiple threads, it compounds the problem. When this happens, we can end up triggering a double register of the new consent requirements, which will crash. We now surround all this with a threading lock, and check for this in the signal handler to avoid triggering an extra recomputation.
    5691f304cf9c6161b63529ec1906fc30924a5a92
    Description From Last Updated

    Blank line between these two.

    daviddavid
    david
    1. 
        
    2. reviewboard/accounts/privacy.py (Diff revision 1)
       
       
       
      Show all issues

      Blank line between these two.

      1. Oops, the assert was leftover debugging. I'll remove it.

    3. 
        
    maubin
    1. Ship It!
    2. 
        
    chipx86
    Review request changed
    Status:
    Completed
    Change Summary:
    Pushed to release-6.x (fb9ddfe)