static
void destroy_thread_sync_data(struct thread_sync_data *tsd)
{
- if(tsd->mtx) {
- Curl_mutex_destroy(tsd->mtx);
- free(tsd->mtx);
- }
+ Curl_mutex_destroy(&tsd->mutx);
free(tsd->hostname);
(void) hints;
#endif
- tsd->mtx = malloc(sizeof(curl_mutex_t));
- if(!tsd->mtx)
- goto err_exit;
-
- Curl_mutex_init(tsd->mtx);
+ Curl_mutex_init(&tsd->mutx);
#ifndef CURL_DISABLE_SOCKETPAIR
/* create socket pair or pipe */
Curl_addrinfo_set_port(tsd->res, tsd->port);
}
- Curl_mutex_acquire(tsd->mtx);
+ Curl_mutex_acquire(&tsd->mutx);
if(tsd->done) {
/* too late, gotta clean up the mess */
- Curl_mutex_release(tsd->mtx);
+ Curl_mutex_release(&tsd->mutx);
destroy_thread_sync_data(tsd);
}
else {
}
#endif
tsd->done = TRUE;
- Curl_mutex_release(tsd->mtx);
+ Curl_mutex_release(&tsd->mutx);
}
return 0;
* if the thread is still blocking in the resolve syscall, detach it and
* let the thread do the cleanup...
*/
- Curl_mutex_acquire(td->tsd.mtx);
+ Curl_mutex_acquire(&td->tsd.mutx);
done = td->tsd.done;
td->tsd.done = TRUE;
- Curl_mutex_release(td->tsd.mtx);
+ Curl_mutex_release(&td->tsd.mutx);
if(!done) {
Curl_thread_destroy(td->thread_hnd);
return CURLE_UNRECOVERABLE_POLL;
#endif
- Curl_mutex_acquire(td->tsd.mtx);
+ Curl_mutex_acquire(&td->tsd.mutx);
done = td->tsd.done;
- Curl_mutex_release(td->tsd.mtx);
+ Curl_mutex_release(&td->tsd.mutx);
if(done) {
getaddrinfo_complete(data);
/* Data for synchronization between resolver thread and its parent */
struct thread_sync_data {
- curl_mutex_t *mtx;
char *hostname; /* hostname to resolve, Curl_async.hostname
duplicate */
+ curl_mutex_t mutx;
#ifndef CURL_DISABLE_SOCKETPAIR
curl_socket_t sock_pair[2]; /* eventfd/pipes/socket pair */
#endif