D-Bus
1.4.10
Main Page
Related Pages
Modules
Data Structures
Files
File List
dbus
dbus-resources.c
1
/* -*- mode: C; c-file-style: "gnu"; indent-tabs-mode: nil; -*- */
2
/* dbus-resources.c Resource tracking/limits
3
*
4
* Copyright (C) 2003 Red Hat Inc.
5
*
6
* Licensed under the Academic Free License version 2.1
7
*
8
* This program is free software; you can redistribute it and/or modify
9
* it under the terms of the GNU General Public License as published by
10
* the Free Software Foundation; either version 2 of the License, or
11
* (at your option) any later version.
12
*
13
* This program is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
* GNU General Public License for more details.
17
*
18
* You should have received a copy of the GNU General Public License
19
* along with this program; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*
22
*/
23
24
#include <config.h>
25
#include <dbus/dbus-resources.h>
26
#include <dbus/dbus-internals.h>
27
54
struct
DBusCounter
55
{
56
int
refcount
;
58
long
size_value
;
59
long
unix_fd_value
;
61
long
notify_size_guard_value
;
62
long
notify_unix_fd_guard_value
;
64
DBusCounterNotifyFunction
notify_function
;
65
void
*
notify_data
;
66
};
67
/* end of resource limits internals docs */
69
81
DBusCounter
*
82
_dbus_counter_new
(
void
)
83
{
84
DBusCounter
*counter;
85
86
counter =
dbus_new
(
DBusCounter
, 1);
87
if
(counter ==
NULL
)
88
return
NULL
;
89
90
counter->
refcount
= 1;
91
counter->
size_value
= 0;
92
counter->
unix_fd_value
= 0;
93
94
counter->
notify_size_guard_value
= 0;
95
counter->
notify_unix_fd_guard_value
= 0;
96
counter->
notify_function
=
NULL
;
97
counter->
notify_data
=
NULL
;
98
99
return
counter;
100
}
101
108
DBusCounter
*
109
_dbus_counter_ref
(
DBusCounter
*counter)
110
{
111
_dbus_assert
(counter->
refcount
> 0);
112
113
counter->
refcount
+= 1;
114
115
return
counter;
116
}
117
124
void
125
_dbus_counter_unref
(
DBusCounter
*counter)
126
{
127
_dbus_assert
(counter->
refcount
> 0);
128
129
counter->
refcount
-= 1;
130
131
if
(counter->
refcount
== 0)
132
{
133
134
dbus_free
(counter);
135
}
136
}
137
147
void
148
_dbus_counter_adjust_size
(
DBusCounter
*counter,
149
long
delta)
150
{
151
long
old = counter->
size_value
;
152
153
counter->
size_value
+= delta;
154
155
#if 0
156
_dbus_verbose (
"Adjusting counter %ld by %ld = %ld\n"
,
157
old, delta, counter->
size_value
);
158
#endif
159
160
if
(counter->
notify_function
!=
NULL
&&
161
((old < counter->notify_size_guard_value &&
162
counter->
size_value
>= counter->
notify_size_guard_value
) ||
163
(old >= counter->
notify_size_guard_value
&&
164
counter->
size_value
< counter->
notify_size_guard_value
)))
165
(* counter->
notify_function
) (counter, counter->
notify_data
);
166
}
167
177
void
178
_dbus_counter_adjust_unix_fd
(
DBusCounter
*counter,
179
long
delta)
180
{
181
long
old = counter->
unix_fd_value
;
182
183
counter->
unix_fd_value
+= delta;
184
185
#if 0
186
_dbus_verbose (
"Adjusting counter %ld by %ld = %ld\n"
,
187
old, delta, counter->
unix_fd_value
);
188
#endif
189
190
if
(counter->
notify_function
!=
NULL
&&
191
((old < counter->notify_unix_fd_guard_value &&
192
counter->
unix_fd_value
>= counter->
notify_unix_fd_guard_value
) ||
193
(old >= counter->
notify_unix_fd_guard_value
&&
194
counter->
unix_fd_value
< counter->
notify_unix_fd_guard_value
)))
195
(* counter->
notify_function
) (counter, counter->
notify_data
);
196
}
197
204
long
205
_dbus_counter_get_size_value
(
DBusCounter
*counter)
206
{
207
return
counter->
size_value
;
208
}
209
216
long
217
_dbus_counter_get_unix_fd_value
(
DBusCounter
*counter)
218
{
219
return
counter->
unix_fd_value
;
220
}
221
233
void
234
_dbus_counter_set_notify
(
DBusCounter
*counter,
235
long
size_guard_value,
236
long
unix_fd_guard_value,
237
DBusCounterNotifyFunction
function
,
238
void
*user_data)
239
{
240
counter->
notify_size_guard_value
= size_guard_value;
241
counter->
notify_unix_fd_guard_value
= unix_fd_guard_value;
242
counter->
notify_function
=
function
;
243
counter->
notify_data
= user_data;
244
}
245
/* end of resource limits exported API */
Generated by
1.8.1.1