Skip to content

Commit

Permalink
Avoid race conditions when setting RCTNetworkTask status
Browse files Browse the repository at this point in the history
  • Loading branch information
petertravelchime authored and pxpeterxu committed Jun 23, 2021
1 parent dee949b commit f33f209
Showing 1 changed file with 12 additions and 1 deletion.
13 changes: 12 additions & 1 deletion Libraries/Network/RCTNetworkTask.mm
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,18 @@ - (void)start
id token = [_handler sendRequest:_request withDelegate:self];
if ([self validateRequestToken:token]) {
_selfReference = self;
_status = RCTNetworkTaskInProgress;

// It's possible that, between the start of this function and now that:
// 1. This thread has yielded
// 2. Another thread had already processed sendRequest:_request, and
// set status to RCTNetworkTaskFinished by calling didCompleteWithError
// 3. This thread continues executing
//
// As a result, we first check to make sure this network request hadn't
// already finished before setting the status to "In progress"
if (_status == RCTNetworkTaskPending) {
_status = RCTNetworkTaskInProgress;
}
}
}
}
Expand Down

0 comments on commit f33f209

Please sign in to comment.