Drizzled Public API Documentation
Main Page
Related Pages
Modules
Namespaces
Classes
Files
File List
File Members
ut0wqueue.cc
1
/*****************************************************************************
2
3
Copyright (C) 2006, 2009, Innobase Oy. All Rights Reserved.
4
5
This program is free software; you can redistribute it and/or modify it under
6
the terms of the GNU General Public License as published by the Free Software
7
Foundation; version 2 of the License.
8
9
This program is distributed in the hope that it will be useful, but WITHOUT
10
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11
FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12
13
You should have received a copy of the GNU General Public License along with
14
this program; if not, write to the Free Software Foundation, Inc., 51 Franklin
15
St, Fifth Floor, Boston, MA 02110-1301 USA
16
17
*****************************************************************************/
18
19
#include "
ut0wqueue.h
"
20
21
/*******************************************************************/
28
/****************************************************************/
31
UNIV_INTERN
32
ib_wqueue_t
*
33
ib_wqueue_create
(
void
)
34
/*===================*/
35
{
36
ib_wqueue_t
* wq =
static_cast<
ib_wqueue_t
*
>
(mem_alloc(
sizeof
(
ib_wqueue_t
)));
37
38
/* Function ib_wqueue_create() has not been used anywhere,
39
not necessary to instrument this mutex */
40
mutex_create(PFS_NOT_INSTRUMENTED, &wq->
mutex
, SYNC_WORK_QUEUE);
41
42
wq->
items
=
ib_list_create
();
43
wq->
event
=
os_event_create
(NULL);
44
45
return
(wq);
46
}
47
48
/****************************************************************/
50
UNIV_INTERN
51
void
52
ib_wqueue_free
(
53
/*===========*/
54
ib_wqueue_t
* wq)
55
{
56
ut_a
(!
ib_list_get_first
(wq->
items
));
57
58
mutex_free(&wq->
mutex
);
59
ib_list_free
(wq->
items
);
60
os_event_free
(wq->
event
);
61
62
mem_free
(wq);
63
}
64
65
/****************************************************************/
67
UNIV_INTERN
68
void
69
ib_wqueue_add
(
70
/*==========*/
71
ib_wqueue_t
* wq,
72
void
* item,
73
mem_heap_t
* heap)
75
{
76
mutex_enter(&wq->
mutex
);
77
78
ib_list_add_last
(wq->
items
, item, heap);
79
os_event_set
(wq->
event
);
80
81
mutex_exit(&wq->
mutex
);
82
}
83
84
/****************************************************************/
87
UNIV_INTERN
88
void
*
89
ib_wqueue_wait
(
90
/*===========*/
91
ib_wqueue_t
* wq)
92
{
93
ib_list_node_t
* node;
94
95
for
(;;) {
96
os_event_wait(wq->
event
);
97
98
mutex_enter(&wq->
mutex
);
99
100
node =
ib_list_get_first
(wq->
items
);
101
102
if
(node) {
103
ib_list_remove
(wq->
items
, node);
104
105
if
(!
ib_list_get_first
(wq->
items
)) {
106
/* We must reset the event when the list
107
gets emptied. */
108
os_event_reset
(wq->
event
);
109
}
110
111
break
;
112
}
113
114
mutex_exit(&wq->
mutex
);
115
}
116
117
mutex_exit(&wq->
mutex
);
118
119
return
(node->
data
);
120
}
plugin
innobase
ut
ut0wqueue.cc
Generated on Mon Jun 10 2013 09:48:19 for drizzle by
1.8.1.2