Groonga 3.0.9 Source Code Document
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Pages
ngx_event_mutex.c
Go to the documentation of this file.
1 
2 /*
3  * Copyright (C) Igor Sysoev
4  * Copyright (C) Nginx, Inc.
5  */
6 
7 
8 #include <ngx_config.h>
9 #include <ngx_core.h>
10 #include <ngx_event.h>
11 
12 
14  ngx_event_t *ev)
15 {
17  "lock event mutex %p lock:%XD", m, m->lock);
18 
19  if (m->lock) {
20 
21  if (m->events == NULL) {
22  m->events = ev;
23 
24  } else {
25  m->last->next = ev;
26  }
27 
28  m->last = ev;
29  ev->next = NULL;
30 
31 #if (NGX_THREADS0)
32  ev->light = 1;
33 #endif
34 
35  ngx_add_timer(ev, timer);
36 
37  return NGX_AGAIN;
38  }
39 
40  m->lock = 1;
41 
42  return NGX_OK;
43 }
44 
45 
47 {
48  ngx_event_t *ev;
49 
50  if (m->lock == 0) {
52  "tring to unlock the free event mutex %p", m);
53  return NGX_ERROR;
54  }
55 
57  "unlock event mutex %p, next event: %p", m, m->events);
58 
59  m->lock = 0;
60 
61  if (m->events) {
62  ev = m->events;
63  m->events = ev->next;
64 
66  ngx_posted_events = ev;
67  }
68 
69  return NGX_OK;
70 }