зеркало из https://github.com/microsoft/git.git
Merge branch 'jc/http-clear-finished-pointer'
Meant to go with js/ci-gcc-12-fixes. * jc/http-clear-finished-pointer: http.c: clear the 'finished' member once we are done with it
This commit is contained in:
Коммит
4c9b052377
26
http.c
26
http.c
|
@ -1385,6 +1385,32 @@ void run_active_slot(struct active_request_slot *slot)
|
|||
select(max_fd+1, &readfds, &writefds, &excfds, &select_timeout);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* The value of slot->finished we set before the loop was used
|
||||
* to set our "finished" variable when our request completed.
|
||||
*
|
||||
* 1. The slot may not have been reused for another requst
|
||||
* yet, in which case it still has &finished.
|
||||
*
|
||||
* 2. The slot may already be in-use to serve another request,
|
||||
* which can further be divided into two cases:
|
||||
*
|
||||
* (a) If call run_active_slot() hasn't been called for that
|
||||
* other request, slot->finished would have been cleared
|
||||
* by get_active_slot() and has NULL.
|
||||
*
|
||||
* (b) If the request did call run_active_slot(), then the
|
||||
* call would have updated slot->finished at the beginning
|
||||
* of this function, and with the clearing of the member
|
||||
* below, we would find that slot->finished is now NULL.
|
||||
*
|
||||
* In all cases, slot->finished has no useful information to
|
||||
* anybody at this point. Some compilers warn us for
|
||||
* attempting to smuggle a pointer that is about to become
|
||||
* invalid, i.e. &finished. We clear it here to assure them.
|
||||
*/
|
||||
slot->finished = NULL;
|
||||
}
|
||||
|
||||
static void release_active_slot(struct active_request_slot *slot)
|
||||
|
|
Загрузка…
Ссылка в новой задаче