提交 219aa86c 编写于 作者: A Andrea Grandi 提交者: Matt Caswell

Further improvements to ASYNC_WAIT_CTX_clear_fd

Remove call to cleanup function
Use only one loop to find previous element
Reviewed-by: NRich Salz <rsalz@openssl.org>
Reviewed-by: NMatt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/2581)
上级 f89dd673
...@@ -138,11 +138,12 @@ int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd, ...@@ -138,11 +138,12 @@ int ASYNC_WAIT_CTX_get_changed_fds(ASYNC_WAIT_CTX *ctx, OSSL_ASYNC_FD *addfd,
int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key) int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key)
{ {
struct fd_lookup_st *curr; struct fd_lookup_st *curr, *prev;
curr = ctx->fds; curr = ctx->fds;
prev = NULL;
while (curr != NULL) { while (curr != NULL) {
if (curr->del) { if (curr->del == 1) {
/* This one has been marked deleted already so do nothing */ /* This one has been marked deleted already so do nothing */
curr = curr->next; curr = curr->next;
continue; continue;
...@@ -152,24 +153,13 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key) ...@@ -152,24 +153,13 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key)
if (curr->add == 1) { if (curr->add == 1) {
if (ctx->fds == curr) { if (ctx->fds == curr) {
ctx->fds = curr->next; ctx->fds = curr->next;
} } else {
else {
struct fd_lookup_st *prev = ctx->fds;
while (prev->next != curr && prev->next != NULL) {
prev = prev->next;
}
if (prev->next == NULL) {
return 1;
}
prev->next = curr->next; prev->next = curr->next;
} }
/* /* It is responsibility of the caller to cleanup before calling
* The fd has just been added so it can't be used externally * ASYNC_WAIT_CTX_clear_fd
* and it is safe to call the cleanup function here
*/ */
if (curr->cleanup != NULL)
curr->cleanup(ctx, curr->key, curr->fd, curr->custom_data);
OPENSSL_free(curr); OPENSSL_free(curr);
ctx->numadd--; ctx->numadd--;
return 1; return 1;
...@@ -184,6 +174,7 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key) ...@@ -184,6 +174,7 @@ int ASYNC_WAIT_CTX_clear_fd(ASYNC_WAIT_CTX *ctx, const void *key)
ctx->numdel++; ctx->numdel++;
return 1; return 1;
} }
prev = curr;
curr = curr->next; curr = curr->next;
} }
return 0; return 0;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册