From 8d4b8195833c9ace6b5a2259a7daaa567bc6eee0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=A6=8C=EA=A6=AB=EA=A6=B6=EA=A6=8F=EA=A7=80=EA=A6=A6?= =?UTF-8?q?=EA=A6=BF=EA=A6=A7=EA=A6=AE=EA=A6=91=EA=A6=A9=EA=A6=AD=EA=A7=80?= Date: Fri, 14 Jan 2022 07:51:16 +0800 Subject: Use pthread when there's no C11 threads --- configure.ac | 2 ++ request.c | 25 ++++++++++++++++++++++++- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/configure.ac b/configure.ac index 7ce3b34..7f4be42 100644 --- a/configure.ac +++ b/configure.ac @@ -4,6 +4,8 @@ AC_PROG_CC AM_PROG_AR LT_INIT PKG_CHECK_MODULES([TIDY], [tidy]) +AC_CHECK_HEADERS([threads.h], + [AC_DEFINE([HAVE_THREADS_H])]) AC_CHECK_HEADER_STDBOOL AC_C_INLINE AC_CHECK_FUNCS([memset]) diff --git a/request.c b/request.c index 34bff9c..3b1d715 100644 --- a/request.c +++ b/request.c @@ -13,7 +13,12 @@ extern emscripten_fetch_attr_t attr; #else +#ifdef HAVE_THREADS_H #include +#else +#include +typedef pthread_t thrd_t; +#endif #include extern char *sampleurl; @@ -35,9 +40,17 @@ static size_t append(char *data, size_t size, size_t nmemb, icclient_response *r return realsize; } -static int async(void *arg) +static +#ifdef HAVE_THREADS_H +int +#else +void * +#endif +async(void *arg) { +#ifdef HAVE_THREADS_H int ret = thrd_success; +#endif struct container *container = (struct container *)arg; CURLcode res = curl_easy_perform(container->response->curl); if (container->post) @@ -45,7 +58,9 @@ static int async(void *arg) if (res == CURLE_OK && container->handler) container->handler(container->response); else { +#ifdef HAVE_THREADS_H ret = thrd_error; +#endif #ifdef DEBUG const char *error = curl_easy_strerror(res); #ifdef __ANDROID__ @@ -56,7 +71,11 @@ static int async(void *arg) #endif } free(container); +#ifdef HAVE_THREADS_H return ret; +#else + return NULL; +#endif } #endif @@ -182,6 +201,10 @@ void request(void (*handler)(icclient_response *), void (*callback)(void *), str container->handler = handler; container->response = response; thrd_t thread; +#ifdef HAVE_THREADS_H thrd_create(&thread, async, container); +#else + pthread_create(&thread, NULL, async, container); +#endif #endif } -- cgit v1.2.3