mirror of
https://github.com/curl/curl.git
synced 2025-04-24 16:40:32 +08:00
asyn-thread: use pipe instead of socketpair for IPC when available
If pipe() is present. Less overhead. Helped-by: Viktor Szakats Closes #12146
This commit is contained in:
parent
64936919b9
commit
43eb798da0
@ -196,7 +196,7 @@ void destroy_thread_sync_data(struct thread_sync_data *tsd)
|
|||||||
* the other end (for reading) is always closed in the parent thread.
|
* the other end (for reading) is always closed in the parent thread.
|
||||||
*/
|
*/
|
||||||
if(tsd->sock_pair[1] != CURL_SOCKET_BAD) {
|
if(tsd->sock_pair[1] != CURL_SOCKET_BAD) {
|
||||||
sclose(tsd->sock_pair[1]);
|
wakeup_close(tsd->sock_pair[1]);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
memset(tsd, 0, sizeof(*tsd));
|
memset(tsd, 0, sizeof(*tsd));
|
||||||
@ -233,8 +233,8 @@ int init_thread_sync_data(struct thread_data *td,
|
|||||||
Curl_mutex_init(tsd->mtx);
|
Curl_mutex_init(tsd->mtx);
|
||||||
|
|
||||||
#ifndef CURL_DISABLE_SOCKETPAIR
|
#ifndef CURL_DISABLE_SOCKETPAIR
|
||||||
/* create socket pair, avoid AF_LOCAL since it doesn't build on Solaris */
|
/* create socket pair or pipe */
|
||||||
if(Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, &tsd->sock_pair[0]) < 0) {
|
if(wakeup_create(&tsd->sock_pair[0]) < 0) {
|
||||||
tsd->sock_pair[0] = CURL_SOCKET_BAD;
|
tsd->sock_pair[0] = CURL_SOCKET_BAD;
|
||||||
tsd->sock_pair[1] = CURL_SOCKET_BAD;
|
tsd->sock_pair[1] = CURL_SOCKET_BAD;
|
||||||
goto err_exit;
|
goto err_exit;
|
||||||
@ -254,7 +254,7 @@ int init_thread_sync_data(struct thread_data *td,
|
|||||||
err_exit:
|
err_exit:
|
||||||
#ifndef CURL_DISABLE_SOCKETPAIR
|
#ifndef CURL_DISABLE_SOCKETPAIR
|
||||||
if(tsd->sock_pair[0] != CURL_SOCKET_BAD) {
|
if(tsd->sock_pair[0] != CURL_SOCKET_BAD) {
|
||||||
sclose(tsd->sock_pair[0]);
|
wakeup_close(tsd->sock_pair[0]);
|
||||||
tsd->sock_pair[0] = CURL_SOCKET_BAD;
|
tsd->sock_pair[0] = CURL_SOCKET_BAD;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
@ -320,7 +320,7 @@ static unsigned int CURL_STDCALL getaddrinfo_thread(void *arg)
|
|||||||
if(tsd->sock_pair[1] != CURL_SOCKET_BAD) {
|
if(tsd->sock_pair[1] != CURL_SOCKET_BAD) {
|
||||||
/* DNS has been resolved, signal client task */
|
/* DNS has been resolved, signal client task */
|
||||||
buf[0] = 1;
|
buf[0] = 1;
|
||||||
if(swrite(tsd->sock_pair[1], buf, sizeof(buf)) < 0) {
|
if(wakeup_write(tsd->sock_pair[1], buf, sizeof(buf)) < 0) {
|
||||||
/* update sock_erro to errno */
|
/* update sock_erro to errno */
|
||||||
tsd->sock_error = SOCKERRNO;
|
tsd->sock_error = SOCKERRNO;
|
||||||
}
|
}
|
||||||
|
16
lib/multi.c
16
lib/multi.c
@ -55,22 +55,6 @@
|
|||||||
#include "curl_memory.h"
|
#include "curl_memory.h"
|
||||||
#include "memdebug.h"
|
#include "memdebug.h"
|
||||||
|
|
||||||
#ifdef HAVE_PIPE
|
|
||||||
|
|
||||||
#define wakeup_write write
|
|
||||||
#define wakeup_read read
|
|
||||||
#define wakeup_close close
|
|
||||||
#define wakeup_create pipe
|
|
||||||
|
|
||||||
#else /* HAVE_PIPE */
|
|
||||||
|
|
||||||
#define wakeup_write swrite
|
|
||||||
#define wakeup_read sread
|
|
||||||
#define wakeup_close sclose
|
|
||||||
#define wakeup_create(p) Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, p)
|
|
||||||
|
|
||||||
#endif /* __APPLE__ */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97
|
CURL_SOCKET_HASH_TABLE_SIZE should be a prime number. Increasing it from 97
|
||||||
to 911 takes on a 32-bit machine 4 x 804 = 3211 more bytes. Still, every
|
to 911 takes on a 32-bit machine 4 x 804 = 3211 more bytes. Still, every
|
||||||
|
@ -25,6 +25,23 @@
|
|||||||
***************************************************************************/
|
***************************************************************************/
|
||||||
|
|
||||||
#include "curl_setup.h"
|
#include "curl_setup.h"
|
||||||
|
|
||||||
|
#ifdef HAVE_PIPE
|
||||||
|
|
||||||
|
#define wakeup_write write
|
||||||
|
#define wakeup_read read
|
||||||
|
#define wakeup_close close
|
||||||
|
#define wakeup_create pipe
|
||||||
|
|
||||||
|
#else /* HAVE_PIPE */
|
||||||
|
|
||||||
|
#define wakeup_write swrite
|
||||||
|
#define wakeup_read sread
|
||||||
|
#define wakeup_close sclose
|
||||||
|
#define wakeup_create(p) Curl_socketpair(AF_UNIX, SOCK_STREAM, 0, p)
|
||||||
|
|
||||||
|
#endif /* HAVE_PIPE */
|
||||||
|
|
||||||
#ifndef HAVE_SOCKETPAIR
|
#ifndef HAVE_SOCKETPAIR
|
||||||
#include <curl/curl.h>
|
#include <curl/curl.h>
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user