Skip to content

Commit c5f1a31

Browse files
committed
UNIX: fix segfault with curl_multi_socket_action
1 parent 85cf884 commit c5f1a31

File tree

1 file changed

+18
-7
lines changed

1 file changed

+18
-7
lines changed

ext/curl/curl_async.c

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -196,7 +196,8 @@ static void curl_async_event_start(zend_async_event_t *event)
196196
}
197197

198198
curl_multi_add_handle(curl_multi_handle, curl_event->curl);
199-
curl_multi_socket_action(curl_multi_handle, CURL_SOCKET_TIMEOUT, 0, NULL);
199+
int running_handles = 0;
200+
curl_multi_socket_action(curl_multi_handle, CURL_SOCKET_TIMEOUT, 0, &running_handles);
200201

201202
if (UNEXPECTED(EG(exception) != NULL)) {
202203
event->stop(event);
@@ -278,7 +279,8 @@ static void curl_poll_callback(
278279
action |= CURL_CSELECT_ERR;
279280
}
280281

281-
curl_multi_socket_action(curl_multi_handle, poll_event->socket, action, NULL);
282+
int running_handles = 0;
283+
curl_multi_socket_action(curl_multi_handle, poll_event->socket, action, &running_handles);
282284
process_curl_completed_handles();
283285
}
284286

@@ -357,7 +359,8 @@ static void timer_callback(
357359
zend_async_event_t *event, zend_async_event_callback_t *callback, void * result, zend_object *exception
358360
)
359361
{
360-
curl_multi_socket_action(curl_multi_handle, CURL_SOCKET_TIMEOUT, 0, NULL);
362+
int running_handles = 0;
363+
curl_multi_socket_action(curl_multi_handle, CURL_SOCKET_TIMEOUT, 0, &running_handles);
361364
process_curl_completed_handles();
362365
}
363366

@@ -608,7 +611,10 @@ static void multi_timer_callback(
608611
)
609612
{
610613
curl_multi_event_callback_t *async_event_callback = (curl_multi_event_callback_t *) callback;
611-
curl_multi_socket_action(async_event_callback->curl_m_event->curl_m->multi, CURL_SOCKET_TIMEOUT, 0, NULL);
614+
int running_handles = 0;
615+
curl_multi_socket_action(
616+
async_event_callback->curl_m_event->curl_m->multi, CURL_SOCKET_TIMEOUT, 0, &running_handles
617+
);
612618
}
613619

614620
static int multi_timer_cb(CURLM *multi, const long timeout_ms, void *user_p)
@@ -688,7 +694,10 @@ static void curl_multi_poll_callback(
688694
action |= CURL_CSELECT_ERR;
689695
}
690696

691-
curl_multi_socket_action(poll_callback->curl_m_event->curl_m->multi, socket_event->socket, action, NULL);
697+
int running_handles = 0;
698+
curl_multi_socket_action(
699+
poll_callback->curl_m_event->curl_m->multi, socket_event->socket, action, &running_handles
700+
);
692701
}
693702

694703
static int multi_socket_cb(CURL *curl, const curl_socket_t socket_fd, const int what, void *user_p, void *data)
@@ -816,7 +825,8 @@ CURLMcode curl_async_multi_perform(php_curlm * curl_m, int *running_handles)
816825
return CURLM_INTERNAL_ERROR;
817826
}
818827

819-
curl_multi_socket_action(curl_m->multi, CURL_SOCKET_TIMEOUT, 0, NULL);
828+
int running_handles_internal = 0;
829+
curl_multi_socket_action(curl_m->multi, CURL_SOCKET_TIMEOUT, 0, &running_handles_internal);
820830

821831
const curl_async_multi_event_t *async_event = curl_m->async_event;
822832

@@ -870,7 +880,8 @@ CURLMcode curl_async_select(php_curlm * curl_m, int timeout_ms, int* numfds)
870880
}
871881

872882
// Initiate execution of the transfer
873-
curl_multi_socket_action(multi_handle, CURL_SOCKET_TIMEOUT, 0, NULL);
883+
int running_handles = 0;
884+
curl_multi_socket_action(multi_handle, CURL_SOCKET_TIMEOUT, 0, &running_handles);
874885

875886
// Suspend coroutine until events are ready
876887
ZEND_ASYNC_SUSPEND();

0 commit comments

Comments
 (0)