static int max_changes, nchanges, nevents;
#if (NGX_THREADS)
-static ngx_mutex_t *ngx_kqueue_mutex;
+static ngx_mutex_t *list_mutex;
+static ngx_mutex_t *kevent_mutex;
#endif
}
#if (NGX_THREADS)
- if (!(ngx_kqueue_mutex = ngx_mutex_init(cycle->log, 0))) {
+
+ if (!(list_mutex = ngx_mutex_init(cycle->log, 0))) {
+ return NGX_ERROR;
+ }
+
+ if (!(kevent_mutex = ngx_mutex_init(cycle->log, 0))) {
return NGX_ERROR;
}
+
#endif
}
ngx_kqueue = -1;
#if (NGX_THREADS)
- ngx_mutex_destroy(ngx_kqueue_mutex);
+ ngx_mutex_destroy(kevent_mutex);
+ ngx_mutex_destroy(list_mutex);
#endif
ngx_free(change_list1);
ev->disabled = 0;
ev->oneshot = (flags & NGX_ONESHOT_EVENT) ? 1 : 0;
- if (ngx_mutex_lock(ngx_kqueue_mutex) == NGX_ERROR) {
+ if (ngx_mutex_lock(list_mutex) == NGX_ERROR) {
return NGX_ERROR;
}
e->index = ev->index;
}
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(list_mutex);
return NGX_OK;
}
ngx_log_error(NGX_LOG_ALERT, ev->log, 0,
"previous event on #%d were not passed in kernel", c->fd);
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(list_mutex);
return NGX_ERROR;
}
rc = ngx_kqueue_set_event(ev, event, EV_ADD|EV_ENABLE|flags);
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(list_mutex);
return rc;
}
ev->active = 0;
ev->disabled = 0;
- if (ngx_mutex_lock(ngx_kqueue_mutex) == NGX_ERROR) {
+ if (ngx_mutex_lock(list_mutex) == NGX_ERROR) {
return NGX_ERROR;
}
e->index = ev->index;
}
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(list_mutex);
return NGX_OK;
}
*/
if (flags & NGX_CLOSE_EVENT) {
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(list_mutex);
return NGX_OK;
}
rc = ngx_kqueue_set_event(ev, event,
flags & NGX_DISABLE_EVENT ? EV_DISABLE : EV_DELETE);
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(list_mutex);
return rc;
}
struct timespec ts;
struct kevent *changes;
- if (try) {
- rc = ngx_mutex_trylock(ngx_kqueue_mutex);
- if (rc != NGX_OK) {
- return rc;
- }
+ if (ngx_mutex_lock(kevent_mutex) == NGX_ERROR) {
+ return NGX_ERROR;
+ }
- } else {
- if (ngx_mutex_lock(ngx_kqueue_mutex) == NGX_ERROR) {
- return NGX_ERROR;
- }
+ if (ngx_mutex_lock(list_mutex) == NGX_ERROR) {
+ ngx_mutex_unlock(kevent_mutex);
+ return NGX_ERROR;
}
if (nchanges == 0) {
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(list_mutex);
+ ngx_mutex_unlock(kevent_mutex);
return NGX_OK;
}
- changes = (struct kevent *) change_list;
+ changes = change_list;
if (change_list == change_list0) {
change_list = change_list1;
} else {
n = nchanges;
nchanges = 0;
+ ngx_mutex_unlock(list_mutex);
+
ts.tv_sec = 0;
ts.tv_nsec = 0;
rc = NGX_OK;
}
- ngx_mutex_unlock(ngx_kqueue_mutex);
+ ngx_mutex_unlock(kevent_mutex);
return rc;
}