Skip to content

Commit

Permalink
Fix build error under unix
Browse files Browse the repository at this point in the history
  • Loading branch information
qgymib committed Dec 27, 2024
1 parent 4e184ad commit 4595fd6
Show file tree
Hide file tree
Showing 5 changed files with 116 additions and 88 deletions.
101 changes: 59 additions & 42 deletions ev.c
Original file line number Diff line number Diff line change
Expand Up @@ -7319,18 +7319,15 @@ EV_LOCAL int ev__tcp_open_win(ev_tcp_t *tcp, SOCKET fd)
// #line 48 "ev.c"
////////////////////////////////////////////////////////////////////////////////
// FILE: ev/win/thread_win.c
// SIZE: 4413
// SHA-256: 165db6ddf2c3107110367a13952f6533b3df3072af23e2abe899f6186c0d8cf6
// SIZE: 4303
// SHA-256: aeb2a238ec4e97a4fa242b86bcce481e444056b1d8feaaffaecd48a5124e5309
////////////////////////////////////////////////////////////////////////////////
// #line 1 "ev/win/thread_win.c"
#include <process.h>

typedef HANDLE ev_os_thread_t;
#define EV_OS_THREAD_INVALID INVALID_HANDLE_VALUE

struct ev_thread
{
ev_os_thread_t thread;
HANDLE thread;
};

typedef struct ev_thread_helper_win
Expand Down Expand Up @@ -13996,8 +13993,8 @@ EV_LOCAL int ev__tcp_open(ev_tcp_t *tcp, int fd)
// #line 80 "ev.c"
////////////////////////////////////////////////////////////////////////////////
// FILE: ev/unix/thread_unix.c
// SIZE: 3650
// SHA-256: c9657f65b8d8414261c6026f3c68d1b38f5e7b9ab17da1a67bd0ee46da5df176
// SIZE: 4070
// SHA-256: dd5a8a4e87eda420c5c4d86408ea541495f43ebecb5807403a0d3fa7480c7eb7
////////////////////////////////////////////////////////////////////////////////
// #line 1 "ev/unix/thread_unix.c"
#define _GNU_SOURCE
Expand All @@ -14006,17 +14003,22 @@ EV_LOCAL int ev__tcp_open(ev_tcp_t *tcp, int fd)
#include <unistd.h>
#include <sys/syscall.h>

struct ev_thread
{
pthread_t thr;
};

typedef struct ev_thread_helper_unix
{
ev_thread_cb cb;
void* arg;
sem_t sem;
}ev_thread_helper_unix_t;
ev_thread_cb cb;
void *arg;
sem_t sem;
} ev_thread_helper_unix_t;

static void* _ev_thread_proxy_unix(void* arg)
static void *_ev_thread_proxy_unix(void *arg)
{
ev_thread_helper_unix_t* p_helper = arg;
ev_thread_helper_unix_t helper = *p_helper;
ev_thread_helper_unix_t *p_helper = arg;
ev_thread_helper_unix_t helper = *p_helper;

if (sem_post(&p_helper->sem) != 0)
{
Expand All @@ -14027,13 +14029,12 @@ static void* _ev_thread_proxy_unix(void* arg)
return NULL;
}

int ev_thread_init(ev_os_thread_t* thr, const ev_thread_opt_t* opt,
ev_thread_cb cb, void* arg)
static int s_thread_init(ev_thread_t *thr, const ev_thread_opt_t *opt,
ev_thread_cb cb, void *arg)
{
int err = 0;

pthread_attr_t* attr = NULL;
pthread_attr_t attr_storage;
int err;
pthread_attr_t *attr = NULL;
pthread_attr_t attr_storage;

if (opt != NULL && opt->flags.have_stack_size)
{
Expand Down Expand Up @@ -14061,12 +14062,13 @@ int ev_thread_init(ev_os_thread_t* thr, const ev_thread_opt_t* opt,
goto err_fin;
}

if ((err = pthread_create(thr, attr, _ev_thread_proxy_unix, &helper)) != 0)
if ((err = pthread_create(&thr->thr, attr, _ev_thread_proxy_unix,
&helper)) != 0)
{
goto release_sem;
}

do
do
{
err = sem_wait(&helper.sem);
} while (err == -1 && errno == EINTR);
Expand All @@ -14083,12 +14085,32 @@ int ev_thread_init(ev_os_thread_t* thr, const ev_thread_opt_t* opt,
return ev__translate_sys_error(err);
}

int ev_thread_exit(ev_os_thread_t* thr, unsigned long timeout)
int ev_thread_init(ev_thread_t **thr, const ev_thread_opt_t *opt,
ev_thread_cb cb, void *arg)
{
ev_thread_t *new_thread = ev_malloc(sizeof(ev_thread_t));
if (new_thread == NULL)
{
return EV_ENOMEM;
}

int ret = s_thread_init(new_thread, opt, cb, arg);
if (ret != 0)
{
ev_free(new_thread);
return ret;
}

*thr = new_thread;
return 0;
}

int ev_thread_exit(ev_thread_t *thr, unsigned long timeout)
{
int ret = EBUSY;
if (timeout == EV_INFINITE_TIMEOUT)
{
int err = pthread_join(*thr, NULL);
int err = pthread_join(thr->thr, NULL);
return ev__translate_sys_error(err);
}

Expand All @@ -14098,7 +14120,7 @@ int ev_thread_exit(ev_os_thread_t* thr, unsigned long timeout)
uint64_t t_now;
while ((t_now = ev_hrtime() / 1000000) < t_end)
{
if ((ret = pthread_tryjoin_np(*thr, NULL)) == 0)
if ((ret = pthread_tryjoin_np(thr->thr, NULL)) == 0)
{
break;
}
Expand All @@ -14111,35 +14133,30 @@ int ev_thread_exit(ev_os_thread_t* thr, unsigned long timeout)
/* try last time */
if (ret == EBUSY)
{
ret = pthread_tryjoin_np(*thr, NULL);
ret = pthread_tryjoin_np(thr->thr, NULL);
}
if (ret == 0)
{
ev_free(thr);
return 0;
}

return ret == EBUSY ? EV_ETIMEDOUT : ev__translate_sys_error(ret);
}

ev_os_thread_t ev_thread_self(void)
{
return pthread_self();
}

ev_os_tid_t ev_thread_id(void)
{
return syscall(__NR_gettid);
}

int ev_thread_equal(const ev_os_thread_t* t1, const ev_os_thread_t* t2)
{
return pthread_equal(*t1, *t2);
}

void ev_thread_sleep(uint32_t timeout)
{
struct timespec t_req, t_rem;
t_req.tv_sec = timeout / 1000;
t_req.tv_nsec = (timeout - t_req.tv_sec * 1000) * 1000 * 1000;

int ret;
while((ret = nanosleep(&t_req, &t_rem)) != 0)
while ((ret = nanosleep(&t_req, &t_rem)) != 0)
{
ret = errno;
if (ret != EINTR)
Expand All @@ -14150,7 +14167,7 @@ void ev_thread_sleep(uint32_t timeout)
}
}

int ev_tls_init(ev_tls_t* tls)
int ev_tls_init(ev_tls_t *tls)
{
int ret = pthread_key_create(&tls->tls, NULL);
if (ret == 0)
Expand All @@ -14160,7 +14177,7 @@ int ev_tls_init(ev_tls_t* tls)
return ev__translate_sys_error(ret);
}

void ev_tls_exit(ev_tls_t* tls)
void ev_tls_exit(ev_tls_t *tls)
{
int ret = pthread_key_delete(tls->tls);
if (ret != 0)
Expand All @@ -14169,7 +14186,7 @@ void ev_tls_exit(ev_tls_t* tls)
}
}

void ev_tls_set(ev_tls_t* tls, void* val)
void ev_tls_set(ev_tls_t *tls, void *val)
{
int ret = pthread_setspecific(tls->tls, val);
if (ret != 0)
Expand All @@ -14178,7 +14195,7 @@ void ev_tls_set(ev_tls_t* tls, void* val)
}
}

void* ev_tls_get(ev_tls_t* tls)
void *ev_tls_get(ev_tls_t *tls)
{
return pthread_getspecific(tls->tls);
}
Expand Down
7 changes: 2 additions & 5 deletions ev.h
Original file line number Diff line number Diff line change
Expand Up @@ -1826,8 +1826,8 @@ typedef struct ev_file_map_backend
#else
////////////////////////////////////////////////////////////////////////////////
// FILE: ev/unix.h
// SIZE: 11959
// SHA-256: f00e5c25ef8152d02346dad83adb97eaec0a9d2779eb6452bc75b56f860512f1
// SIZE: 11860
// SHA-256: 1a926dac29fa21621d61ad56d57643771f8312ca7020049ae9aa0fd6b749ea53
////////////////////////////////////////////////////////////////////////////////
// #line 1 "ev/unix.h"
/**
Expand Down Expand Up @@ -1925,9 +1925,6 @@ typedef pid_t ev_os_tid_t;
typedef int ev_os_file_t;
#define EV_OS_FILE_INVALID (-1)

typedef pthread_t ev_os_thread_t;
#define EV_OS_THREAD_INVALID ((pthread_t)(-1))

typedef pthread_key_t ev_os_tls_t;
typedef pthread_mutex_t ev_os_mutex_t;
typedef sem_t ev_os_sem_t;
Expand Down
3 changes: 0 additions & 3 deletions include/ev/unix.h
Original file line number Diff line number Diff line change
Expand Up @@ -93,9 +93,6 @@ typedef pid_t ev_os_tid_t;
typedef int ev_os_file_t;
#define EV_OS_FILE_INVALID (-1)

typedef pthread_t ev_os_thread_t;
#define EV_OS_THREAD_INVALID ((pthread_t)(-1))

typedef pthread_key_t ev_os_tls_t;
typedef pthread_mutex_t ev_os_mutex_t;
typedef sem_t ev_os_sem_t;
Expand Down
Loading

0 comments on commit 4595fd6

Please sign in to comment.