Duncan Coutts pushed to branch wip/dcoutts/io-manager-tidy at Glasgow Haskell Compiler / GHC

Commits:

1 changed file:

Changes:

  • rts/posix/Poll.c
    ... ... @@ -222,6 +222,13 @@ void syncIOCancelPoll(CapIOManager *iomgr, StgTSO *tso)
    222 222
          * status, as that is done by removeFromQueues (in the throwTo* functions).
    
    223 223
          */
    
    224 224
         tso->block_info.closure = (StgClosure *)END_TSO_QUEUE;
    
    225
    +
    
    226
    +    /* We are in the TSO case, where the aiop was only reachable from the TSO
    
    227
    +     * itself, and thus it is now no longer be reachable at all.
    
    228
    +     */
    
    229
    +    IF_NONMOVING_WRITE_BARRIER_ENABLED {
    
    230
    +        updateRemembSetPushClosure(iomgr->cap, (StgClosure *)aiop);
    
    231
    +    }
    
    225 232
     }
    
    226 233
     
    
    227 234
     
    
    ... ... @@ -279,7 +286,6 @@ static void notifyIOCompletion(CapIOManager *iomgr, StgAsyncIOOp *aiop)
    279 286
                     raiseAsync(iomgr->cap, tso,
    
    280 287
                                (StgClosure *)blockedOnBadFD_closure,
    
    281 288
                                false, NULL);
    
    282
    -                break;
    
    283 289
                 } else {
    
    284 290
                     /* We should be guaranteed that the tso is still on the same
    
    285 291
                      * cap because the tso was not on the run queue of any cap and
    
    ... ... @@ -290,6 +296,12 @@ static void notifyIOCompletion(CapIOManager *iomgr, StgAsyncIOOp *aiop)
    290 296
                     tso->_link       = END_TSO_QUEUE;
    
    291 297
                     pushOnRunQueue(iomgr->cap, tso);
    
    292 298
                 }
    
    299
    +            /* For the TSO case, the aiop was only reachable from the TSO
    
    300
    +             * itself, and thus it is now no longer be reachable at all.
    
    301
    +             */
    
    302
    +            IF_NONMOVING_WRITE_BARRIER_ENABLED {
    
    303
    +                updateRemembSetPushClosure(iomgr->cap, (StgClosure *)aiop);
    
    304
    +            }
    
    293 305
                 break;
    
    294 306
             }
    
    295 307
             case NotifyMVar: