Merge lp:~mordred/gearmand/visibility-changes into lp:gearmand/1.0
- visibility-changes
- Merge into 1.0
Proposed by
Monty Taylor
Status: | Merged |
---|---|
Merged at revision: | not available |
Proposed branch: | lp:~mordred/gearmand/visibility-changes |
Merge into: | lp:gearmand/1.0 |
Diff against target: |
11528 lines (+4425/-3077) 72 files modified
.bzrignore (+41/-33) ChangeLog (+8/-0) Makefile.am (+8/-7) benchmark/benchmark.c (+1/-1) benchmark/include.am (+3/-3) config/pre_hook.sh (+1/-1) configure.ac (+2/-17) docs/man_gen.perl (+2/-1) libgearman-server/common.h (+1/-0) libgearman-server/connection.c (+8/-9) libgearman-server/connection.h (+1/-1) libgearman-server/constants.h (+1/-1) libgearman-server/gearmand.c (+1/-1) libgearman-server/gearmand.h (+1/-1) libgearman-server/gearmand_con.c (+4/-4) libgearman-server/gearmand_con.h (+2/-2) libgearman-server/gearmand_thread.c (+1/-1) libgearman-server/include.am (+8/-12) libgearman-server/packet.c (+4/-4) libgearman-server/protocol_http.c (+20/-18) libgearman-server/server.c (+13/-10) libgearman-server/server.h (+1/-1) libgearman-server/structs.h (+8/-8) libgearman-server/thread.c (+10/-12) libgearman/client.c (+186/-196) libgearman/client.h (+46/-20) libgearman/command.h (+6/-199) libgearman/common.h (+1/-2) libgearman/connection.c (+505/-366) libgearman/connection.h (+181/-90) libgearman/constants.h (+34/-167) libgearman/core.c (+73/-0) libgearman/core.h (+49/-0) libgearman/gearman.c (+57/-0) libgearman/gearman.h (+112/-0) libgearman/include.am (+46/-24) libgearman/job.c (+72/-33) libgearman/job.h (+44/-0) libgearman/log.c (+101/-0) libgearman/log.h (+16/-90) libgearman/packet.c (+141/-26) libgearman/packet.h (+109/-19) libgearman/task.c (+69/-2) libgearman/task.h (+61/-0) libgearman/universal.c (+204/-577) libgearman/universal.h (+161/-282) libgearman/visibility.h (+11/-1) libgearman/worker.c (+175/-153) libgearman/worker.h (+69/-19) m4/pandora_canonical.m4 (+2/-2) m4/pandora_drizzle_build.m4 (+13/-1) m4/pandora_optimize.m4 (+1/-1) m4/pandora_visibility.m4 (+8/-4) m4/pandora_warnings.m4 (+2/-2) m4/pandora_with_memcached.m4 (+1/-0) m4/pandora_with_python.m4 (+11/-2) m4/pandora_with_python3.m4 (+1/-1) tests/client_test.c (+259/-74) tests/client_test.rec (+0/-28) tests/include.am (+40/-46) tests/internals.c (+487/-0) tests/memcached_test.c (+38/-46) tests/memcached_test.rec (+0/-14) tests/regression.c (+212/-0) tests/sqlite_test.c (+37/-46) tests/sqlite_test.rec (+0/-14) tests/test.c (+195/-97) tests/test.h (+130/-27) tests/test_worker.c (+2/-1) tests/worker_drone.c (+21/-21) tests/worker_test.c (+286/-219) tests/worker_test.rec (+0/-17) |
To merge this branch: | bzr merge lp:~mordred/gearmand/visibility-changes |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Brian Aker | Pending | ||
Review via email: mp+16677@code.launchpad.net |
Commit message
Description of the change
To post a comment you must log in.
Revision history for this message
Monty Taylor (mordred) wrote : | # |
- 277. By Monty Taylor
-
Updated memcached test to check that we actually _have_ memcached before trying
to test against it. - 278. By Monty Taylor
-
Bumped version numbers for release.
- 279. By Monty Taylor
-
Fixed header install.
- 280. By Monty Taylor
-
Change libgearman-server to a noinst lib.
- 281. By Monty Taylor
-
Made libgearman-server a noinst lib.
- 282. By Monty Taylor
-
Don't install the libgearman-server headers.
Preview Diff
[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1 | === modified file '.bzrignore' |
2 | --- .bzrignore 2009-08-10 21:22:21 +0000 |
3 | +++ .bzrignore 2009-12-30 19:24:13 +0000 |
4 | @@ -1,20 +1,28 @@ |
5 | +*.deps |
6 | +*.dirstamp |
7 | +*.la |
8 | +*.libs |
9 | +*.lo |
10 | +*.moved |
11 | +*.o |
12 | +*.orig |
13 | +*.rej |
14 | *Makefile |
15 | *Makefile.in |
16 | -*.o |
17 | -*.lo |
18 | -*.la |
19 | -*.deps |
20 | -*.libs |
21 | +*gz |
22 | +*rpm |
23 | *stamp-h1 |
24 | +INSTALL |
25 | +TAGS |
26 | aclocal.m4 |
27 | autom4te.cache |
28 | +benchmark/blobslap_client |
29 | +benchmark/blobslap_worker |
30 | +bin/gearman |
31 | +config.h |
32 | +config.h.in |
33 | config.log |
34 | config.status |
35 | -config.h |
36 | -config.h.in |
37 | -configure |
38 | -libtool |
39 | -INSTALL |
40 | config/compile |
41 | config/config.guess |
42 | config/config.sub |
43 | @@ -22,11 +30,12 @@ |
44 | config/install-sh |
45 | config/ltmain.sh |
46 | config/missing |
47 | +config/plugin.ac |
48 | +configure |
49 | docs/api |
50 | docs/dev |
51 | docs/man/man3/*.3 |
52 | docs/man_list |
53 | -gearmand/gearmand |
54 | examples/echo_client |
55 | examples/echo_worker |
56 | examples/reverse_client |
57 | @@ -34,31 +43,30 @@ |
58 | examples/reverse_client_cb |
59 | examples/reverse_worker |
60 | examples/wc_worker |
61 | +gearmand/gearmand |
62 | +libtool |
63 | +m4/libtool.m4 |
64 | +m4/ltoptions.m4 |
65 | +m4/ltsugar.m4 |
66 | +m4/ltversion.m4 |
67 | +m4/lt~obsolete.m4 |
68 | +out |
69 | +patch |
70 | +patch* |
71 | +scripts/gearmand |
72 | +scripts/gearmand-init |
73 | +scripts/gearmand.xml |
74 | +scripts/smf_install.sh |
75 | +support/gearmand.pc |
76 | +support/gearmand.spec |
77 | tests/client_test |
78 | tests/client_test.res |
79 | -tests/worker_test |
80 | -tests/worker_test.res |
81 | +tests/cpp_test |
82 | +tests/internals_test |
83 | tests/memcached_test |
84 | tests/memcached_test.res |
85 | +tests/regression_test |
86 | tests/sqlite_test |
87 | tests/sqlite_test.res |
88 | -support/gearmand.pc |
89 | -support/gearmand.spec |
90 | -benchmark/blobslap_client |
91 | -benchmark/blobslap_worker |
92 | -bin/gearman |
93 | -tests/cpp_test |
94 | -scripts/gearmand-init |
95 | -scripts/gearmand |
96 | -scripts/gearmand.xml |
97 | -scripts/smf_install.sh |
98 | -m4/libtool.m4 |
99 | -m4/ltoptions.m4 |
100 | -m4/ltsugar.m4 |
101 | -m4/ltversion.m4 |
102 | -m4/lt~obsolete.m4 |
103 | -TAGS |
104 | -*rpm |
105 | -*gz |
106 | -*.moved |
107 | -config/plugin.ac |
108 | +tests/worker_test |
109 | +tests/worker_test.res |
110 | |
111 | === modified file 'ChangeLog' |
112 | --- ChangeLog 2009-12-18 20:37:36 +0000 |
113 | +++ ChangeLog 2009-12-30 19:24:13 +0000 |
114 | @@ -1,3 +1,11 @@ |
115 | +0.13 |
116 | + * Fixed bug where setting an option off in mass would not trip any |
117 | + triggers on the option (for both worker and client). |
118 | + * Options that are internal can no longer be set by external |
119 | + callers. |
120 | + * Deprecated gearman_client_set_event_watch_fn() and |
121 | + gearman_worker_set_event_watch_fn. |
122 | + |
123 | 0.12 - 2010-01-?? |
124 | * Fixed job handle comparison bug with WORK_FAIL responses. |
125 | * Fixed disable assert configure option. |
126 | |
127 | === modified file 'Makefile.am' |
128 | --- Makefile.am 2009-12-18 19:18:51 +0000 |
129 | +++ Makefile.am 2009-12-30 19:24:13 +0000 |
130 | @@ -13,7 +13,7 @@ |
131 | noinst_PROGRAMS = |
132 | lib_LTLIBRARIES = |
133 | noinst_LTLIBRARIES = |
134 | -nobase_pkginclude_HEADERS = |
135 | +nobase_include_HEADERS = |
136 | noinst_HEADERS = |
137 | EXTRA_DIST = |
138 | CLEANFILES = |
139 | @@ -35,11 +35,7 @@ |
140 | docs/api_header.html \ |
141 | docs/dev_header.html \ |
142 | docs/doxygen.h \ |
143 | - scripts/gearmand-init \ |
144 | - scripts/gearmand.xml \ |
145 | - scripts/gearmand \ |
146 | - scripts/README.solaris \ |
147 | - support/gearmand.spec |
148 | + scripts/README.solaris |
149 | |
150 | pkgconfigdir = $(libdir)/pkgconfig |
151 | pkgconfig_DATA = support/gearmand.pc |
152 | @@ -50,9 +46,14 @@ |
153 | |
154 | test: check |
155 | |
156 | - |
157 | rpm: all dist |
158 | cp gearmand-$(VERSION).tar.gz ~/rpmbuild/SOURCES/ |
159 | rpmbuild -ba support/gearmand.spec |
160 | cp ~/rpmbuild/RPMS/x86_64/gearmand-$(VERSION)*.rpm . |
161 | cp ~/rpmbuild/SRPMS/gearmand-$(VERSION)*.rpm . |
162 | + |
163 | +merge-clean: |
164 | + find ./ | $(GREP) \.orig | xargs rm -f |
165 | + find ./ | $(GREP) \.rej | xargs rm -f |
166 | + find ./ | $(GREP) \~$$ | xargs rm -f |
167 | + bzr unknowns |
168 | |
169 | === modified file 'benchmark/benchmark.c' |
170 | --- benchmark/benchmark.c 2009-01-19 20:39:38 +0000 |
171 | +++ benchmark/benchmark.c 2009-12-30 19:24:13 +0000 |
172 | @@ -30,7 +30,7 @@ |
173 | |
174 | gettimeofday(&(benchmark->end), NULL); |
175 | if (benchmark->end.tv_sec != benchmark->begin.tv_sec) |
176 | - { |
177 | + { |
178 | benchmark->total_jobs+= benchmark->jobs; |
179 | |
180 | printf("[Current: %6"PRIu64" jobs/s, Total: %6"PRIu64" jobs/s]\n", |
181 | |
182 | === modified file 'benchmark/include.am' |
183 | --- benchmark/include.am 2009-12-18 18:54:27 +0000 |
184 | +++ benchmark/include.am 2009-12-30 19:24:13 +0000 |
185 | @@ -12,11 +12,11 @@ |
186 | |
187 | |
188 | noinst_PROGRAMS+= \ |
189 | - benchmark/blobslap_client \ |
190 | - benchmark/blobslap_worker |
191 | + benchmark/blobslap_client \ |
192 | + benchmark/blobslap_worker |
193 | |
194 | noinst_HEADERS+= \ |
195 | - benchmark/benchmark.h |
196 | + benchmark/benchmark.h |
197 | |
198 | noinst_LTLIBRARIES+= benchmark/libbenchmark.la |
199 | benchmark_libbenchmark_la_SOURCES= benchmark/benchmark.c |
200 | |
201 | === modified file 'config/pre_hook.sh' |
202 | --- config/pre_hook.sh 2009-09-25 00:04:06 +0000 |
203 | +++ config/pre_hook.sh 2009-12-30 19:24:13 +0000 |
204 | @@ -6,5 +6,5 @@ |
205 | fi |
206 | fi |
207 | echo "Generating docs..." |
208 | -cat libgearman/*.h libgearman-server/*.h | $PERL docs/man_gen.perl > docs/man_list |
209 | +cat libgearman/*.h | $PERL docs/man_gen.perl > docs/man_list |
210 | |
211 | |
212 | === modified file 'configure.ac' |
213 | --- configure.ac 2009-12-18 19:25:00 +0000 |
214 | +++ configure.ac 2009-12-30 19:24:13 +0000 |
215 | @@ -6,7 +6,7 @@ |
216 | # the COPYING file in this directory for full text. |
217 | |
218 | AC_PREREQ(2.59) |
219 | -AC_INIT([gearmand],[0.11],[https://launchpad.net/gearmand]) |
220 | +AC_INIT([gearmand],[0.12],[https://launchpad.net/gearmand]) |
221 | AC_CONFIG_SRCDIR(libgearman/gearman.c) |
222 | AC_CONFIG_AUX_DIR(config) |
223 | AC_CONFIG_HEADERS([config.h]) |
224 | @@ -14,7 +14,7 @@ |
225 | |
226 | PANDORA_CANONICAL_TARGET(require-cxx) |
227 | |
228 | -GEARMAN_LIBRARY_VERSION=3:0:0 |
229 | +GEARMAN_LIBRARY_VERSION=4:0:0 |
230 | # | | | |
231 | # +------+ | +---+ |
232 | # | | | |
233 | @@ -28,21 +28,6 @@ |
234 | # +- increment if interfaces have been added, removed or changed |
235 | AC_SUBST(GEARMAN_LIBRARY_VERSION) |
236 | |
237 | -GEARMAN_SERVER_LIBRARY_VERSION=0:1:0 |
238 | -# | | | |
239 | -# +------+ | +---+ |
240 | -# | | | |
241 | -# current:revision:age |
242 | -# | | | |
243 | -# | | +- increment if interfaces have been |
244 | -# | | added, set to zero if interfaces |
245 | -# | | have been removed or changed |
246 | -# | +- increment if source code has changed |
247 | -# | set to zero if current is incremented |
248 | -# +- increment if interfaces have been added, removed |
249 | -# or changed |
250 | -AC_SUBST(GEARMAN_SERVER_LIBRARY_VERSION) |
251 | - |
252 | |
253 | PANDORA_REQUIRE_PTHREAD |
254 | PANDORA_REQUIRE_LIBEVENT |
255 | |
256 | === modified file 'docs/man_gen.perl' |
257 | --- docs/man_gen.perl 2009-09-29 04:34:21 +0000 |
258 | +++ docs/man_gen.perl 2009-12-30 19:24:13 +0000 |
259 | @@ -81,7 +81,8 @@ |
260 | } |
261 | |
262 | $func= join(" ", @func_lines); |
263 | - if ($name) |
264 | + |
265 | + if ($name and ($func =~ m/GEARMAN_API/ or $func =~ m/GEARMAN_DEPRECATED_API/ )) |
266 | { |
267 | # We have a function! Output a man page. |
268 | print " \\\n\t$path/man$section/$name.$section"; |
269 | |
270 | === modified file 'libgearman-server/common.h' |
271 | --- libgearman-server/common.h 2009-10-29 00:11:45 +0000 |
272 | +++ libgearman-server/common.h 2009-12-30 19:24:13 +0000 |
273 | @@ -16,6 +16,7 @@ |
274 | |
275 | #include "config.h" |
276 | |
277 | +#define GEARMAN_CORE |
278 | #include "server.h" |
279 | |
280 | #ifdef HAVE_ASSERT_H |
281 | |
282 | === renamed file 'libgearman-server/conn.c' => 'libgearman-server/connection.c' |
283 | --- libgearman-server/conn.c 2009-10-29 00:11:45 +0000 |
284 | +++ libgearman-server/connection.c 2009-12-30 19:24:13 +0000 |
285 | @@ -27,7 +27,7 @@ |
286 | if (con == NULL) |
287 | return NULL; |
288 | |
289 | - if (gearman_con_set_fd(&(con->con), fd) != GEARMAN_SUCCESS) |
290 | + if (gearman_connection_set_fd(&(con->con), fd) != GEARMAN_SUCCESS) |
291 | { |
292 | gearman_server_con_free(con); |
293 | return NULL; |
294 | @@ -35,7 +35,7 @@ |
295 | |
296 | con->con.context= data; |
297 | |
298 | - ret= gearman_con_set_events(&(con->con), POLLIN); |
299 | + ret= gearman_connection_set_events(&(con->con), POLLIN); |
300 | if (ret != GEARMAN_SUCCESS) |
301 | { |
302 | gearman_server_con_free(con); |
303 | @@ -66,14 +66,13 @@ |
304 | } |
305 | } |
306 | |
307 | - if (gearman_add_con(thread->gearman, &(con->con)) == NULL) |
308 | + gearman_connection_options_t options[] = { GEARMAN_CON_IGNORE_LOST_CONNECTION, GEARMAN_CON_MAX }; |
309 | + if (gearman_connection_create(thread->gearman, &(con->con), options) == NULL) |
310 | { |
311 | free(con); |
312 | return NULL; |
313 | } |
314 | |
315 | - gearman_con_add_options(&(con->con), GEARMAN_CON_IGNORE_LOST_CONNECTION); |
316 | - |
317 | con->options= 0; |
318 | con->ret= 0; |
319 | con->io_list= false; |
320 | @@ -122,7 +121,7 @@ |
321 | return; |
322 | } |
323 | |
324 | - gearman_con_free(&(con->con)); |
325 | + gearman_connection_free(&(con->con)); |
326 | |
327 | if (con->proc_list) |
328 | gearman_server_con_proc_remove(con); |
329 | @@ -162,19 +161,19 @@ |
330 | free(con); |
331 | } |
332 | |
333 | -gearman_con_st *gearman_server_con_con(gearman_server_con_st *con) |
334 | +gearman_connection_st *gearman_server_con_con(gearman_server_con_st *con) |
335 | { |
336 | return &con->con; |
337 | } |
338 | |
339 | void *gearman_server_con_data(gearman_server_con_st *con) |
340 | { |
341 | - return gearman_con_context(&(con->con)); |
342 | + return gearman_connection_context(&(con->con)); |
343 | } |
344 | |
345 | void gearman_server_con_set_data(gearman_server_con_st *con, void *data) |
346 | { |
347 | - gearman_con_set_context(&(con->con), data); |
348 | + gearman_connection_set_context(&(con->con), data); |
349 | } |
350 | |
351 | const char *gearman_server_con_host(gearman_server_con_st *con) |
352 | |
353 | === renamed file 'libgearman-server/conn.h' => 'libgearman-server/connection.h' |
354 | --- libgearman-server/conn.h 2009-10-29 00:11:45 +0000 |
355 | +++ libgearman-server/connection.h 2009-12-30 19:24:13 +0000 |
356 | @@ -58,7 +58,7 @@ |
357 | * Get gearman connection pointer the server connection uses. |
358 | */ |
359 | GEARMAN_API |
360 | -gearman_con_st *gearman_server_con_con(gearman_server_con_st *con); |
361 | +gearman_connection_st *gearman_server_con_con(gearman_server_con_st *con); |
362 | |
363 | /** |
364 | * Get application data pointer. |
365 | |
366 | === modified file 'libgearman-server/constants.h' |
367 | --- libgearman-server/constants.h 2009-10-29 00:11:45 +0000 |
368 | +++ libgearman-server/constants.h 2009-12-30 19:24:13 +0000 |
369 | @@ -212,7 +212,7 @@ |
370 | gearman_queue_add_fn *add_fn, |
371 | void *add_context); |
372 | |
373 | -typedef gearman_return_t (gearman_con_add_fn)(gearman_con_st *con); |
374 | +typedef gearman_return_t (gearman_connection_add_fn)(gearman_connection_st *con); |
375 | |
376 | /** @} */ |
377 | |
378 | |
379 | === modified file 'libgearman-server/gearmand.c' |
380 | --- libgearman-server/gearmand.c 2009-12-02 19:09:59 +0000 |
381 | +++ libgearman-server/gearmand.c 2009-12-30 19:24:13 +0000 |
382 | @@ -166,7 +166,7 @@ |
383 | } |
384 | |
385 | gearman_return_t gearmand_port_add(gearmand_st *gearmand, in_port_t port, |
386 | - gearman_con_add_fn *function) |
387 | + gearman_connection_add_fn *function) |
388 | { |
389 | gearmand_port_st *port_list; |
390 | |
391 | |
392 | === modified file 'libgearman-server/gearmand.h' |
393 | --- libgearman-server/gearmand.h 2009-10-29 22:01:39 +0000 |
394 | +++ libgearman-server/gearmand.h 2009-12-30 19:24:13 +0000 |
395 | @@ -106,7 +106,7 @@ |
396 | */ |
397 | GEARMAN_API |
398 | gearman_return_t gearmand_port_add(gearmand_st *gearmand, in_port_t port, |
399 | - gearman_con_add_fn *function); |
400 | + gearman_connection_add_fn *function); |
401 | |
402 | /** |
403 | * Run the server instance. |
404 | |
405 | === modified file 'libgearman-server/gearmand_con.c' |
406 | --- libgearman-server/gearmand_con.c 2009-12-02 19:09:59 +0000 |
407 | +++ libgearman-server/gearmand_con.c 2009-12-30 19:24:13 +0000 |
408 | @@ -37,7 +37,7 @@ |
409 | |
410 | gearman_return_t gearmand_con_create(gearmand_st *gearmand, int fd, |
411 | const char *host, const char *port, |
412 | - gearman_con_add_fn *add_fn) |
413 | + gearman_connection_add_fn *add_fn) |
414 | { |
415 | gearmand_con_st *dcon; |
416 | gearmand_con_st *free_dcon_list; |
417 | @@ -179,14 +179,14 @@ |
418 | } |
419 | } |
420 | |
421 | -gearman_return_t gearmand_con_watch(gearman_con_st *con, short events, |
422 | +gearman_return_t gearmand_connection_watch(gearman_connection_st *con, short events, |
423 | void *context __attribute__ ((unused))) |
424 | { |
425 | (void) context; |
426 | gearmand_con_st *dcon; |
427 | short set_events= 0; |
428 | |
429 | - dcon= (gearmand_con_st *)gearman_con_context(con); |
430 | + dcon= (gearmand_con_st *)gearman_connection_context(con); |
431 | dcon->con= con; |
432 | |
433 | if (events & POLLIN) |
434 | @@ -238,7 +238,7 @@ |
435 | if (events & EV_WRITE) |
436 | revents|= POLLOUT; |
437 | |
438 | - ret= gearman_con_set_revents(dcon->con, revents); |
439 | + ret= gearman_connection_set_revents(dcon->con, revents); |
440 | if (ret != GEARMAN_SUCCESS) |
441 | { |
442 | gearmand_con_free(dcon); |
443 | |
444 | === modified file 'libgearman-server/gearmand_con.h' |
445 | --- libgearman-server/gearmand_con.h 2009-10-29 20:18:00 +0000 |
446 | +++ libgearman-server/gearmand_con.h 2009-12-30 19:24:13 +0000 |
447 | @@ -41,7 +41,7 @@ |
448 | GEARMAN_API |
449 | gearman_return_t gearmand_con_create(gearmand_st *gearmand, int fd, |
450 | const char *host, const char *port, |
451 | - gearman_con_add_fn *add_fn); |
452 | + gearman_connection_add_fn *add_fn); |
453 | |
454 | /** |
455 | * Free resources used by a connection. |
456 | @@ -60,7 +60,7 @@ |
457 | * Callback function used for setting events in libevent. |
458 | */ |
459 | GEARMAN_API |
460 | -gearman_return_t gearmand_con_watch(gearman_con_st *con, short events, |
461 | +gearman_return_t gearmand_connection_watch(gearman_connection_st *con, short events, |
462 | void *context); |
463 | |
464 | /** @} */ |
465 | |
466 | === modified file 'libgearman-server/gearmand_thread.c' |
467 | --- libgearman-server/gearmand_thread.c 2009-12-02 19:09:59 +0000 |
468 | +++ libgearman-server/gearmand_thread.c 2009-12-30 19:24:13 +0000 |
469 | @@ -65,7 +65,7 @@ |
470 | gearman_server_thread_set_log_fn(&(thread->server_thread), _log, thread, |
471 | gearmand->verbose); |
472 | gearman_server_thread_set_event_watch(&(thread->server_thread), |
473 | - gearmand_con_watch, NULL); |
474 | + gearmand_connection_watch, NULL); |
475 | |
476 | thread->options= 0; |
477 | thread->count= 0; |
478 | |
479 | === modified file 'libgearman-server/include.am' |
480 | --- libgearman-server/include.am 2009-12-18 19:25:00 +0000 |
481 | +++ libgearman-server/include.am 2009-12-30 19:24:13 +0000 |
482 | @@ -30,10 +30,10 @@ |
483 | QUEUE_LIBPQ_C= libgearman-server/queue_libpq.c |
484 | endif |
485 | |
486 | -lib_LTLIBRARIES+= libgearman-server/libgearman-server.la |
487 | - |
488 | - |
489 | -nobase_pkginclude_HEADERS += \ |
490 | +noinst_LTLIBRARIES+= libgearman-server/libgearman-server.la |
491 | + |
492 | + |
493 | +noinst_HEADERS += \ |
494 | $(QUEUE_LIBDRIZZLE_H) \ |
495 | $(QUEUE_LIBMEMCACHED_H) \ |
496 | $(QUEUE_LIBPQ_H) \ |
497 | @@ -41,7 +41,7 @@ |
498 | libgearman-server/client.h \ |
499 | libgearman-server/conf.h \ |
500 | libgearman-server/conf_module.h \ |
501 | - libgearman-server/conn.h \ |
502 | + libgearman-server/connection.h \ |
503 | libgearman-server/constants.h \ |
504 | libgearman-server/function.h \ |
505 | libgearman-server/gearmand.h \ |
506 | @@ -66,7 +66,7 @@ |
507 | libgearman-server/client.c \ |
508 | libgearman-server/conf.c \ |
509 | libgearman-server/conf_module.c \ |
510 | - libgearman-server/conn.c \ |
511 | + libgearman-server/connection.c \ |
512 | libgearman-server/function.c \ |
513 | libgearman-server/gearmand.c \ |
514 | libgearman-server/gearmand_con.c \ |
515 | @@ -82,15 +82,11 @@ |
516 | ${AM_CFLAGS} \ |
517 | -DBUILDING_LIBGEARMAN |
518 | |
519 | -libgearman_server_libgearman_server_la_LDFLAGS= \ |
520 | - $(AM_LDFLAGS) \ |
521 | - -version-info \ |
522 | - $(GEARMAN_SERVER_LIBRARY_VERSION) |
523 | - |
524 | libgearman_server_libgearman_server_la_LIBADD= \ |
525 | $(LTLIBDRIZZLE) \ |
526 | $(LTLIBEVENT) \ |
527 | $(LTLIBMEMCACHED) \ |
528 | $(LTLIBPQ) \ |
529 | $(LTLIBSQLITE3) \ |
530 | - libgearman/libgearman.la |
531 | + libgearman/libgearman.la \ |
532 | + libgearman/libgearmancore.la |
533 | |
534 | === modified file 'libgearman-server/packet.c' |
535 | --- libgearman-server/packet.c 2009-10-29 00:11:45 +0000 |
536 | +++ libgearman-server/packet.c 2009-12-30 19:24:13 +0000 |
537 | @@ -101,8 +101,8 @@ |
538 | if (server_packet == NULL) |
539 | return GEARMAN_MEMORY_ALLOCATION_FAILURE; |
540 | |
541 | - if (gearman_add_packet(con->thread->gearman, |
542 | - &(server_packet->packet)) == NULL) |
543 | + if (gearman_packet_create(con->thread->gearman, |
544 | + &(server_packet->packet)) == NULL) |
545 | { |
546 | gearman_server_packet_free(server_packet, con->thread, false); |
547 | return GEARMAN_MEMORY_ALLOCATION_FAILURE; |
548 | @@ -117,7 +117,7 @@ |
549 | { |
550 | arg_size = va_arg(ap, size_t); |
551 | |
552 | - ret= gearman_packet_add_arg(&(server_packet->packet), arg, arg_size); |
553 | + ret= gearman_packet_create_arg(&(server_packet->packet), arg, arg_size); |
554 | if (ret != GEARMAN_SUCCESS) |
555 | { |
556 | va_end(ap); |
557 | @@ -140,7 +140,7 @@ |
558 | } |
559 | |
560 | if (take_data) |
561 | - server_packet->packet.options|= GEARMAN_PACKET_FREE_DATA; |
562 | + server_packet->packet.options.free_data= true; |
563 | |
564 | GEARMAN_SERVER_THREAD_LOCK(con->thread) |
565 | GEARMAN_FIFO_ADD(con->io_packet, server_packet,) |
566 | |
567 | === modified file 'libgearman-server/protocol_http.c' |
568 | --- libgearman-server/protocol_http.c 2009-10-29 20:18:00 +0000 |
569 | +++ libgearman-server/protocol_http.c 2009-12-30 19:24:13 +0000 |
570 | @@ -37,12 +37,12 @@ |
571 | } gearman_protocol_http_st; |
572 | |
573 | /* Protocol callback functions. */ |
574 | -static gearman_return_t _http_con_add(gearman_con_st *con); |
575 | -static void _http_free(gearman_con_st *con, void *context); |
576 | -static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con, |
577 | +static gearman_return_t _http_con_add(gearman_connection_st *con); |
578 | +static void _http_free(gearman_connection_st *con, void *context); |
579 | +static size_t _http_pack(const gearman_packet_st *packet, gearman_connection_st *con, |
580 | void *data, size_t data_size, |
581 | gearman_return_t *ret_ptr); |
582 | -static size_t _http_unpack(gearman_packet_st *packet, gearman_con_st *con, |
583 | +static size_t _http_unpack(gearman_packet_st *packet, gearman_connection_st *con, |
584 | const void *data, size_t data_size, |
585 | gearman_return_t *ret_ptr); |
586 | |
587 | @@ -114,7 +114,7 @@ |
588 | * Static definitions |
589 | */ |
590 | |
591 | -static gearman_return_t _http_con_add(gearman_con_st *con) |
592 | +static gearman_return_t _http_con_add(gearman_connection_st *con) |
593 | { |
594 | gearman_protocol_http_st *http; |
595 | |
596 | @@ -128,28 +128,28 @@ |
597 | http->background= false; |
598 | http->keep_alive= false; |
599 | |
600 | - gearman_con_set_protocol_context(con, http); |
601 | - gearman_con_set_protocol_context_free_fn(con, _http_free); |
602 | - gearman_con_set_packet_pack_fn(con, _http_pack); |
603 | - gearman_con_set_packet_unpack_fn(con, _http_unpack); |
604 | + gearman_connection_set_protocol_context(con, http); |
605 | + gearman_connection_set_protocol_context_free_fn(con, _http_free); |
606 | + gearman_connection_set_packet_pack_fn(con, _http_pack); |
607 | + gearman_connection_set_packet_unpack_fn(con, _http_unpack); |
608 | |
609 | return GEARMAN_SUCCESS; |
610 | } |
611 | |
612 | -static void _http_free(gearman_con_st *con __attribute__ ((unused)), |
613 | +static void _http_free(gearman_connection_st *con __attribute__ ((unused)), |
614 | void *context) |
615 | { |
616 | free((gearman_protocol_http_st *)context); |
617 | } |
618 | |
619 | -static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con, |
620 | +static size_t _http_pack(const gearman_packet_st *packet, gearman_connection_st *con, |
621 | void *data, size_t data_size, |
622 | gearman_return_t *ret_ptr) |
623 | { |
624 | size_t pack_size; |
625 | gearman_protocol_http_st *http; |
626 | |
627 | - http= (gearman_protocol_http_st *)gearman_con_protocol_context(con); |
628 | + http= (gearman_protocol_http_st *)gearman_connection_protocol_context(con); |
629 | |
630 | if (packet->command != GEARMAN_COMMAND_WORK_COMPLETE && |
631 | packet->command != GEARMAN_COMMAND_WORK_FAIL && |
632 | @@ -178,14 +178,16 @@ |
633 | return 0; |
634 | } |
635 | |
636 | - if (!(http->keep_alive)) |
637 | - gearman_con_add_options(con, GEARMAN_CON_CLOSE_AFTER_FLUSH); |
638 | + if (! (http->keep_alive)) |
639 | + { |
640 | + gearman_connection_set_option(con, GEARMAN_CON_CLOSE_AFTER_FLUSH, true); |
641 | + } |
642 | |
643 | *ret_ptr= GEARMAN_SUCCESS; |
644 | return pack_size; |
645 | } |
646 | |
647 | -static size_t _http_unpack(gearman_packet_st *packet, gearman_con_st *con, |
648 | +static size_t _http_unpack(gearman_packet_st *packet, gearman_connection_st *con, |
649 | const void *data, size_t data_size, |
650 | gearman_return_t *ret_ptr) |
651 | { |
652 | @@ -214,7 +216,7 @@ |
653 | return offset; |
654 | } |
655 | |
656 | - http= (gearman_protocol_http_st *)gearman_con_protocol_context(con); |
657 | + http= (gearman_protocol_http_st *)gearman_connection_protocol_context(con); |
658 | http->background= false; |
659 | http->keep_alive= false; |
660 | |
661 | @@ -355,11 +357,11 @@ |
662 | if (*ret_ptr != GEARMAN_SUCCESS) |
663 | return 0; |
664 | |
665 | - *ret_ptr= gearman_packet_add_arg(packet, uri, (size_t)uri_size + 1); |
666 | + *ret_ptr= gearman_packet_create_arg(packet, uri, (size_t)uri_size + 1); |
667 | if (*ret_ptr != GEARMAN_SUCCESS) |
668 | return 0; |
669 | |
670 | - *ret_ptr= gearman_packet_add_arg(packet, unique, unique_size + 1); |
671 | + *ret_ptr= gearman_packet_create_arg(packet, unique, unique_size + 1); |
672 | if (*ret_ptr != GEARMAN_SUCCESS) |
673 | return 0; |
674 | |
675 | |
676 | === modified file 'libgearman-server/server.c' |
677 | --- libgearman-server/server.c 2009-10-29 22:01:39 +0000 |
678 | +++ libgearman-server/server.c 2009-12-30 19:24:13 +0000 |
679 | @@ -111,7 +111,7 @@ |
680 | memset(server->unique_hash, 0, |
681 | sizeof(gearman_server_job_st *) * GEARMAN_JOB_HASH_SIZE); |
682 | |
683 | - server->gearman= gearman_create(&(server->gearman_static)); |
684 | + server->gearman= gearman_universal_create(&(server->gearman_universal_static), NULL); |
685 | if (server->gearman == NULL) |
686 | { |
687 | gearman_server_free(server); |
688 | @@ -180,7 +180,7 @@ |
689 | } |
690 | |
691 | if (server->gearman != NULL) |
692 | - gearman_free(server->gearman); |
693 | + gearman_universal_free(server->gearman); |
694 | |
695 | if (server->options & GEARMAN_SERVER_ALLOCATED) |
696 | free(server); |
697 | @@ -237,7 +237,7 @@ |
698 | if (ret != GEARMAN_SUCCESS) |
699 | return ret; |
700 | |
701 | - packet->options&= (gearman_packet_options_t)~GEARMAN_PACKET_FREE_DATA; |
702 | + packet->options.free_data= false; |
703 | |
704 | break; |
705 | |
706 | @@ -284,7 +284,9 @@ |
707 | packet->data_size, priority, |
708 | server_client, &ret); |
709 | if (ret == GEARMAN_SUCCESS) |
710 | - packet->options&= (gearman_packet_options_t)~GEARMAN_PACKET_FREE_DATA; |
711 | + { |
712 | + packet->options.free_data= false; |
713 | + } |
714 | else if (ret == GEARMAN_JOB_QUEUE_FULL) |
715 | { |
716 | return _server_error_packet(server_con, "queue_full", |
717 | @@ -913,8 +915,8 @@ |
718 | return GEARMAN_MEMORY_ALLOCATION_FAILURE; |
719 | } |
720 | |
721 | - if (gearman_add_packet(server_con->thread->gearman, |
722 | - &(server_packet->packet)) == NULL) |
723 | + if (gearman_packet_create(server_con->thread->gearman, |
724 | + &(server_packet->packet)) == NULL) |
725 | { |
726 | free(data); |
727 | gearman_server_packet_free(server_packet, server_con->thread, false); |
728 | @@ -923,8 +925,9 @@ |
729 | |
730 | server_packet->packet.magic= GEARMAN_MAGIC_TEXT; |
731 | server_packet->packet.command= GEARMAN_COMMAND_TEXT; |
732 | - server_packet->packet.options|= (GEARMAN_PACKET_COMPLETE | |
733 | - GEARMAN_PACKET_FREE_DATA); |
734 | + server_packet->packet.options.complete= true; |
735 | + server_packet->packet.options.free_data= true; |
736 | + |
737 | server_packet->packet.data= data; |
738 | server_packet->packet.data_size= strlen(data); |
739 | |
740 | @@ -956,11 +959,11 @@ |
741 | |
742 | if (packet->data_size > 0) |
743 | { |
744 | - if (packet->options & GEARMAN_PACKET_FREE_DATA && |
745 | + if (packet->options.free_data && |
746 | server_client->job_next == NULL) |
747 | { |
748 | data= (uint8_t *)(packet->data); |
749 | - packet->options&= (gearman_packet_options_t)~GEARMAN_PACKET_FREE_DATA; |
750 | + packet->options.free_data= false; |
751 | } |
752 | else |
753 | { |
754 | |
755 | === modified file 'libgearman-server/server.h' |
756 | --- libgearman-server/server.h 2009-10-29 22:01:39 +0000 |
757 | +++ libgearman-server/server.h 2009-12-30 19:24:13 +0000 |
758 | @@ -21,7 +21,7 @@ |
759 | #include <libgearman-server/structs.h> |
760 | #include <libgearman-server/conf.h> |
761 | #include <libgearman-server/conf_module.h> |
762 | -#include <libgearman-server/conn.h> |
763 | +#include <libgearman-server/connection.h> |
764 | #include <libgearman-server/packet.h> |
765 | #include <libgearman-server/function.h> |
766 | #include <libgearman-server/client.h> |
767 | |
768 | === modified file 'libgearman-server/structs.h' |
769 | --- libgearman-server/structs.h 2009-10-29 22:01:39 +0000 |
770 | +++ libgearman-server/structs.h 2009-12-30 19:24:13 +0000 |
771 | @@ -39,7 +39,7 @@ |
772 | uint32_t free_job_count; |
773 | uint32_t free_client_count; |
774 | uint32_t free_worker_count; |
775 | - gearman_st *gearman; |
776 | + gearman_universal_st *gearman; |
777 | gearman_server_thread_st *thread_list; |
778 | gearman_server_function_st *function_list; |
779 | gearman_server_packet_st *free_packet_list; |
780 | @@ -53,7 +53,7 @@ |
781 | gearman_queue_flush_fn *queue_flush_fn; |
782 | gearman_queue_done_fn *queue_done_fn; |
783 | gearman_queue_replay_fn *queue_replay_fn; |
784 | - gearman_st gearman_static; |
785 | + gearman_universal_st gearman_universal_static; |
786 | pthread_mutex_t proc_lock; |
787 | pthread_cond_t proc_cond; |
788 | pthread_t proc_id; |
789 | @@ -73,7 +73,7 @@ |
790 | uint32_t proc_count; |
791 | uint32_t free_con_count; |
792 | uint32_t free_packet_count; |
793 | - gearman_st *gearman; |
794 | + gearman_universal_st *gearman; |
795 | gearman_server_st *server; |
796 | gearman_server_thread_st *next; |
797 | gearman_server_thread_st *prev; |
798 | @@ -86,7 +86,7 @@ |
799 | gearman_server_con_st *proc_list; |
800 | gearman_server_con_st *free_con_list; |
801 | gearman_server_packet_st *free_packet_list; |
802 | - gearman_st gearman_static; |
803 | + gearman_universal_st gearman_universal_static; |
804 | pthread_mutex_t lock; |
805 | }; |
806 | |
807 | @@ -95,7 +95,7 @@ |
808 | */ |
809 | struct gearman_server_con_st |
810 | { |
811 | - gearman_con_st con; /* This must be the first struct member. */ |
812 | + gearman_connection_st con; /* This must be the first struct member. */ |
813 | gearman_server_con_options_t options; |
814 | gearman_return_t ret; |
815 | bool io_list; |
816 | @@ -250,7 +250,7 @@ |
817 | in_port_t port; |
818 | uint32_t listen_count; |
819 | gearmand_st *gearmand; |
820 | - gearman_con_add_fn *add_fn; |
821 | + gearman_connection_add_fn *add_fn; |
822 | int *listen_fd; |
823 | struct event *listen_event; |
824 | }; |
825 | @@ -290,8 +290,8 @@ |
826 | gearmand_con_st *next; |
827 | gearmand_con_st *prev; |
828 | gearman_server_con_st *server_con; |
829 | - gearman_con_st *con; |
830 | - gearman_con_add_fn *add_fn; |
831 | + gearman_connection_st *con; |
832 | + gearman_connection_add_fn *add_fn; |
833 | struct event event; |
834 | char host[NI_MAXHOST]; |
835 | char port[NI_MAXSERV]; |
836 | |
837 | === modified file 'libgearman-server/thread.c' |
838 | --- libgearman-server/thread.c 2009-10-29 20:18:00 +0000 |
839 | +++ libgearman-server/thread.c 2009-12-30 19:24:13 +0000 |
840 | @@ -107,18 +107,16 @@ |
841 | return NULL; |
842 | } |
843 | |
844 | - GEARMAN_LIST_ADD(server->thread, thread,) |
845 | + GEARMAN_LIST_ADD(server->thread, thread,); |
846 | |
847 | - thread->gearman= gearman_create(&(thread->gearman_static)); |
848 | + gearman_options_t options[]= { GEARMAN_NON_BLOCKING, GEARMAN_DONT_TRACK_PACKETS, GEARMAN_MAX}; |
849 | + thread->gearman= gearman_universal_create(&(thread->gearman_universal_static), options); |
850 | if (thread->gearman == NULL) |
851 | { |
852 | gearman_server_thread_free(thread); |
853 | return NULL; |
854 | } |
855 | |
856 | - gearman_set_options(thread->gearman, |
857 | - GEARMAN_NON_BLOCKING | GEARMAN_DONT_TRACK_PACKETS); |
858 | - |
859 | return thread; |
860 | } |
861 | |
862 | @@ -147,7 +145,7 @@ |
863 | } |
864 | |
865 | if (thread->gearman != NULL) |
866 | - gearman_free(thread->gearman); |
867 | + gearman_universal_free(thread->gearman); |
868 | |
869 | pthread_mutex_destroy(&(thread->lock)); |
870 | |
871 | @@ -159,12 +157,12 @@ |
872 | |
873 | const char *gearman_server_thread_error(gearman_server_thread_st *thread) |
874 | { |
875 | - return gearman_error(thread->gearman); |
876 | + return gearman_universal_error(thread->gearman); |
877 | } |
878 | |
879 | int gearman_server_thread_errno(gearman_server_thread_st *thread) |
880 | { |
881 | - return gearman_errno(thread->gearman); |
882 | + return gearman_universal_errno(thread->gearman); |
883 | } |
884 | |
885 | void gearman_server_thread_set_event_watch(gearman_server_thread_st *thread, |
886 | @@ -196,7 +194,7 @@ |
887 | gearman_server_thread_run(gearman_server_thread_st *thread, |
888 | gearman_return_t *ret_ptr) |
889 | { |
890 | - gearman_con_st *con; |
891 | + gearman_connection_st *con; |
892 | gearman_server_con_st *server_con; |
893 | |
894 | /* If we are multi-threaded, we may have packets to flush or connections that |
895 | @@ -295,7 +293,7 @@ |
896 | return GEARMAN_MEMORY_ALLOCATION_FAILURE; |
897 | } |
898 | |
899 | - (void)gearman_con_recv(&(con->con), &(con->packet->packet), &ret, true); |
900 | + (void)gearman_connection_recv(&(con->con), &(con->packet->packet), &ret, true); |
901 | if (ret != GEARMAN_SUCCESS) |
902 | { |
903 | if (ret == GEARMAN_IO_WAIT) |
904 | @@ -343,7 +341,7 @@ |
905 | |
906 | while (con->io_packet_list != NULL) |
907 | { |
908 | - ret= gearman_con_send(&(con->con), &(con->io_packet_list->packet), |
909 | + ret= gearman_connection_send(&(con->con), &(con->io_packet_list->packet), |
910 | con->io_packet_list->next == NULL ? true : false); |
911 | if (ret != GEARMAN_SUCCESS) |
912 | return ret; |
913 | @@ -357,7 +355,7 @@ |
914 | } |
915 | |
916 | /* Clear the POLLOUT flag. */ |
917 | - return gearman_con_set_events(&(con->con), POLLIN); |
918 | + return gearman_connection_set_events(&(con->con), POLLIN); |
919 | } |
920 | |
921 | static gearman_return_t _proc_thread_start(gearman_server_st *server) |
922 | |
923 | === modified file 'libgearman/client.c' |
924 | --- libgearman/client.c 2009-12-16 22:46:32 +0000 |
925 | +++ libgearman/client.c 2009-12-30 19:24:13 +0000 |
926 | @@ -22,7 +22,7 @@ |
927 | /** |
928 | * Allocate a client structure. |
929 | */ |
930 | -static gearman_client_st *_client_allocate(gearman_client_st *client); |
931 | +static gearman_client_st *_client_allocate(gearman_client_st *client, bool is_clone); |
932 | |
933 | /** |
934 | * Callback function used when parsing server lists. |
935 | @@ -83,18 +83,6 @@ |
936 | */ |
937 | static gearman_return_t _client_do_fail(gearman_task_st *task); |
938 | |
939 | -/** |
940 | - * Initialize a task structure. |
941 | - * |
942 | - * @param[in] client Structure previously initialized with |
943 | - * gearman_client_create() or gearman_client_clone(). |
944 | - * @param[in] task Caller allocated structure, or NULL to allocate one. |
945 | - * @return On success, a pointer to the (possibly allocated) structure. On |
946 | - * failure this will be NULL. |
947 | - */ |
948 | -static gearman_task_st *_task_create(gearman_client_st *client, |
949 | - gearman_task_st *task); |
950 | - |
951 | /** @} */ |
952 | |
953 | /* |
954 | @@ -103,35 +91,34 @@ |
955 | |
956 | gearman_client_st *gearman_client_create(gearman_client_st *client) |
957 | { |
958 | - client= _client_allocate(client); |
959 | - if (client == NULL) |
960 | - return NULL; |
961 | - |
962 | - client->gearman= gearman_create(&(client->gearman_static)); |
963 | - if (client->gearman == NULL) |
964 | - { |
965 | - gearman_client_free(client); |
966 | - return NULL; |
967 | - } |
968 | - |
969 | - return client; |
970 | + return _client_allocate(client, false); |
971 | } |
972 | |
973 | gearman_client_st *gearman_client_clone(gearman_client_st *client, |
974 | const gearman_client_st *from) |
975 | { |
976 | - if (from == NULL) |
977 | - return NULL; |
978 | - |
979 | - client= _client_allocate(client); |
980 | + gearman_universal_st *check; |
981 | + |
982 | + if (! from) |
983 | + { |
984 | + return _client_allocate(client, false); |
985 | + } |
986 | + |
987 | + client= _client_allocate(client, false); |
988 | + |
989 | if (client == NULL) |
990 | - return NULL; |
991 | - |
992 | - client->options|= (from->options & |
993 | - (gearman_client_options_t)~GEARMAN_CLIENT_ALLOCATED); |
994 | - |
995 | - client->gearman= gearman_clone(&(client->gearman_static), from->gearman); |
996 | - if (client->gearman == NULL) |
997 | + { |
998 | + return client; |
999 | + } |
1000 | + |
1001 | + client->options.non_blocking= from->options.non_blocking; |
1002 | + client->options.task_in_use= from->options.task_in_use; |
1003 | + client->options.unbuffered_result= from->options.unbuffered_result; |
1004 | + client->options.no_new= from->options.no_new; |
1005 | + client->options.free_tasks= from->options.free_tasks; |
1006 | + |
1007 | + check= gearman_universal_clone((&client->universal), &(from->universal)); |
1008 | + if (! check) |
1009 | { |
1010 | gearman_client_free(client); |
1011 | return NULL; |
1012 | @@ -142,68 +129,122 @@ |
1013 | |
1014 | void gearman_client_free(gearman_client_st *client) |
1015 | { |
1016 | - if (client->options & GEARMAN_CLIENT_TASK_IN_USE) |
1017 | + if (client->options.task_in_use) |
1018 | gearman_task_free(&(client->do_task)); |
1019 | |
1020 | gearman_client_task_free_all(client); |
1021 | |
1022 | - if (client->gearman != NULL) |
1023 | - gearman_free(client->gearman); |
1024 | + gearman_universal_free(&client->universal); |
1025 | |
1026 | - if (client->options & GEARMAN_CLIENT_ALLOCATED) |
1027 | + if (client->options.allocated) |
1028 | free(client); |
1029 | } |
1030 | |
1031 | const char *gearman_client_error(const gearman_client_st *client) |
1032 | { |
1033 | - return gearman_error(client->gearman); |
1034 | + return gearman_universal_error(&client->universal); |
1035 | } |
1036 | |
1037 | int gearman_client_errno(const gearman_client_st *client) |
1038 | { |
1039 | - return gearman_errno(client->gearman); |
1040 | + return gearman_universal_errno(&client->universal); |
1041 | } |
1042 | |
1043 | gearman_client_options_t gearman_client_options(const gearman_client_st *client) |
1044 | { |
1045 | - return client->options; |
1046 | + gearman_client_options_t options; |
1047 | + memset(&options, 0, sizeof(gearman_client_options_t)); |
1048 | + |
1049 | + if (client->options.allocated) |
1050 | + options|= GEARMAN_CLIENT_ALLOCATED; |
1051 | + if (client->options.non_blocking) |
1052 | + options|= GEARMAN_CLIENT_NON_BLOCKING; |
1053 | + if (client->options.task_in_use) |
1054 | + options|= GEARMAN_CLIENT_TASK_IN_USE; |
1055 | + if (client->options.unbuffered_result) |
1056 | + options|= GEARMAN_CLIENT_UNBUFFERED_RESULT; |
1057 | + if (client->options.no_new) |
1058 | + options|= GEARMAN_CLIENT_NO_NEW; |
1059 | + if (client->options.free_tasks) |
1060 | + options|= GEARMAN_CLIENT_FREE_TASKS; |
1061 | + |
1062 | + return options; |
1063 | } |
1064 | |
1065 | void gearman_client_set_options(gearman_client_st *client, |
1066 | gearman_client_options_t options) |
1067 | { |
1068 | - /* Call this to catch any special triggers. */ |
1069 | - gearman_client_add_options(client, options); |
1070 | - |
1071 | - client->options= options; |
1072 | + gearman_client_options_t usable_options[]= { |
1073 | + GEARMAN_CLIENT_NON_BLOCKING, |
1074 | + GEARMAN_CLIENT_UNBUFFERED_RESULT, |
1075 | + GEARMAN_CLIENT_FREE_TASKS, |
1076 | + GEARMAN_CLIENT_MAX |
1077 | + }; |
1078 | + |
1079 | + gearman_client_options_t *ptr; |
1080 | + |
1081 | + |
1082 | + for (ptr= usable_options; *ptr != GEARMAN_CLIENT_MAX ; ptr++) |
1083 | + { |
1084 | + if (options & *ptr) |
1085 | + { |
1086 | + gearman_client_add_options(client, *ptr); |
1087 | + } |
1088 | + else |
1089 | + { |
1090 | + gearman_client_remove_options(client, *ptr); |
1091 | + } |
1092 | + } |
1093 | } |
1094 | |
1095 | void gearman_client_add_options(gearman_client_st *client, |
1096 | gearman_client_options_t options) |
1097 | { |
1098 | if (options & GEARMAN_CLIENT_NON_BLOCKING) |
1099 | - gearman_add_options(client->gearman, GEARMAN_NON_BLOCKING); |
1100 | - |
1101 | - client->options|= options; |
1102 | + { |
1103 | + gearman_universal_add_options(&client->universal, GEARMAN_NON_BLOCKING); |
1104 | + client->options.non_blocking= true; |
1105 | + } |
1106 | + |
1107 | + if (options & GEARMAN_CLIENT_UNBUFFERED_RESULT) |
1108 | + { |
1109 | + client->options.unbuffered_result= true; |
1110 | + } |
1111 | + |
1112 | + if (options & GEARMAN_CLIENT_FREE_TASKS) |
1113 | + { |
1114 | + client->options.free_tasks= true; |
1115 | + } |
1116 | } |
1117 | |
1118 | void gearman_client_remove_options(gearman_client_st *client, |
1119 | gearman_client_options_t options) |
1120 | { |
1121 | if (options & GEARMAN_CLIENT_NON_BLOCKING) |
1122 | - gearman_remove_options(client->gearman, GEARMAN_NON_BLOCKING); |
1123 | - |
1124 | - client->options&= ~options; |
1125 | + { |
1126 | + gearman_universal_remove_options(&client->universal, GEARMAN_NON_BLOCKING); |
1127 | + client->options.non_blocking= false; |
1128 | + } |
1129 | + |
1130 | + if (options & GEARMAN_CLIENT_UNBUFFERED_RESULT) |
1131 | + { |
1132 | + client->options.unbuffered_result= false; |
1133 | + } |
1134 | + |
1135 | + if (options & GEARMAN_CLIENT_FREE_TASKS) |
1136 | + { |
1137 | + client->options.free_tasks= false; |
1138 | + } |
1139 | } |
1140 | |
1141 | int gearman_client_timeout(gearman_client_st *client) |
1142 | { |
1143 | - return gearman_timeout(client->gearman); |
1144 | + return gearman_universal_timeout(&client->universal); |
1145 | } |
1146 | |
1147 | void gearman_client_set_timeout(gearman_client_st *client, int timeout) |
1148 | { |
1149 | - gearman_set_timeout(client->gearman, timeout); |
1150 | + gearman_universal_set_timeout(&client->universal, timeout); |
1151 | } |
1152 | |
1153 | void *gearman_client_context(const gearman_client_st *client) |
1154 | @@ -220,34 +261,27 @@ |
1155 | gearman_log_fn *function, const void *context, |
1156 | gearman_verbose_t verbose) |
1157 | { |
1158 | - gearman_set_log_fn(client->gearman, function, context, verbose); |
1159 | -} |
1160 | - |
1161 | -void gearman_client_set_event_watch_fn(gearman_client_st *client, |
1162 | - gearman_event_watch_fn *function, |
1163 | - const void *context) |
1164 | -{ |
1165 | - gearman_set_event_watch_fn(client->gearman, function, context); |
1166 | + gearman_set_log_fn(&client->universal, function, context, verbose); |
1167 | } |
1168 | |
1169 | void gearman_client_set_workload_malloc_fn(gearman_client_st *client, |
1170 | gearman_malloc_fn *function, |
1171 | const void *context) |
1172 | { |
1173 | - gearman_set_workload_malloc_fn(client->gearman, function, context); |
1174 | + gearman_set_workload_malloc_fn(&client->universal, function, context); |
1175 | } |
1176 | |
1177 | void gearman_client_set_workload_free_fn(gearman_client_st *client, |
1178 | gearman_free_fn *function, |
1179 | const void *context) |
1180 | { |
1181 | - gearman_set_workload_free_fn(client->gearman, function, context); |
1182 | + gearman_set_workload_free_fn(&client->universal, function, context); |
1183 | } |
1184 | |
1185 | gearman_return_t gearman_client_add_server(gearman_client_st *client, |
1186 | const char *host, in_port_t port) |
1187 | { |
1188 | - if (gearman_add_con_args(client->gearman, NULL, host, port) == NULL) |
1189 | + if (gearman_connection_create_args(&client->universal, NULL, host, port) == NULL) |
1190 | return GEARMAN_MEMORY_ALLOCATION_FAILURE; |
1191 | |
1192 | return GEARMAN_SUCCESS; |
1193 | @@ -261,12 +295,12 @@ |
1194 | |
1195 | void gearman_client_remove_servers(gearman_client_st *client) |
1196 | { |
1197 | - gearman_free_all_cons(client->gearman); |
1198 | + gearman_free_all_cons(&client->universal); |
1199 | } |
1200 | |
1201 | gearman_return_t gearman_client_wait(gearman_client_st *client) |
1202 | { |
1203 | - return gearman_wait(client->gearman); |
1204 | + return gearman_wait(&client->universal); |
1205 | } |
1206 | |
1207 | void *gearman_client_do(gearman_client_st *client, const char *function_name, |
1208 | @@ -355,14 +389,14 @@ |
1209 | { |
1210 | gearman_return_t ret; |
1211 | |
1212 | - if (!(client->options & GEARMAN_CLIENT_TASK_IN_USE)) |
1213 | + if (! (client->options.task_in_use)) |
1214 | { |
1215 | (void)gearman_client_add_task_status(client, &(client->do_task), client, |
1216 | job_handle, &ret); |
1217 | if (ret != GEARMAN_SUCCESS) |
1218 | return ret; |
1219 | |
1220 | - client->options|= GEARMAN_CLIENT_TASK_IN_USE; |
1221 | + client->options.task_in_use= true; |
1222 | } |
1223 | |
1224 | gearman_client_clear_fn(client); |
1225 | @@ -380,7 +414,7 @@ |
1226 | *denominator= client->do_task.denominator; |
1227 | |
1228 | gearman_task_free(&(client->do_task)); |
1229 | - client->options&= (gearman_client_options_t)~GEARMAN_CLIENT_TASK_IN_USE; |
1230 | + client->options.task_in_use= false; |
1231 | } |
1232 | |
1233 | return ret; |
1234 | @@ -390,30 +424,7 @@ |
1235 | const void *workload, |
1236 | size_t workload_size) |
1237 | { |
1238 | - return gearman_echo(client->gearman, workload, workload_size); |
1239 | -} |
1240 | - |
1241 | -void gearman_task_free(gearman_task_st *task) |
1242 | -{ |
1243 | - if (task->options & GEARMAN_TASK_SEND_IN_USE) |
1244 | - gearman_packet_free(&(task->send)); |
1245 | - |
1246 | - if (task != &(task->client->do_task) && task->context != NULL && |
1247 | - task->client->task_context_free_fn != NULL) |
1248 | - { |
1249 | - task->client->task_context_free_fn(task, (void *)task->context); |
1250 | - } |
1251 | - |
1252 | - if (task->client->task_list == task) |
1253 | - task->client->task_list= task->next; |
1254 | - if (task->prev != NULL) |
1255 | - task->prev->next= task->next; |
1256 | - if (task->next != NULL) |
1257 | - task->next->prev= task->prev; |
1258 | - task->client->task_count--; |
1259 | - |
1260 | - if (task->options & GEARMAN_TASK_ALLOCATED) |
1261 | - free(task); |
1262 | + return gearman_echo(&client->universal, workload, workload_size); |
1263 | } |
1264 | |
1265 | void gearman_client_task_free_all(gearman_client_st *client) |
1266 | @@ -523,7 +534,7 @@ |
1267 | const void *args[1]; |
1268 | size_t args_size[1]; |
1269 | |
1270 | - task= _task_create(client, task); |
1271 | + task= gearman_task_create(client, task); |
1272 | if (task == NULL) |
1273 | { |
1274 | *ret_ptr= GEARMAN_MEMORY_ALLOCATION_FAILURE; |
1275 | @@ -535,15 +546,15 @@ |
1276 | |
1277 | args[0]= job_handle; |
1278 | args_size[0]= strlen(job_handle); |
1279 | - *ret_ptr= gearman_add_packet_args(client->gearman, &(task->send), |
1280 | - GEARMAN_MAGIC_REQUEST, |
1281 | - GEARMAN_COMMAND_GET_STATUS, |
1282 | - args, args_size, 1); |
1283 | + *ret_ptr= gearman_packet_create_args(&client->universal, &(task->send), |
1284 | + GEARMAN_MAGIC_REQUEST, |
1285 | + GEARMAN_COMMAND_GET_STATUS, |
1286 | + args, args_size, 1); |
1287 | if (*ret_ptr == GEARMAN_SUCCESS) |
1288 | { |
1289 | client->new_tasks++; |
1290 | client->running_tasks++; |
1291 | - task->options|= GEARMAN_TASK_SEND_IN_USE; |
1292 | + task->options.send_in_use= true; |
1293 | } |
1294 | |
1295 | return task; |
1296 | @@ -574,7 +585,7 @@ |
1297 | } |
1298 | |
1299 | void gearman_client_set_status_fn(gearman_client_st *client, |
1300 | - gearman_status_fn *function) |
1301 | + gearman_universal_status_fn *function) |
1302 | { |
1303 | client->status_fn= function; |
1304 | } |
1305 | @@ -611,11 +622,9 @@ |
1306 | |
1307 | gearman_return_t gearman_client_run_tasks(gearman_client_st *client) |
1308 | { |
1309 | - gearman_options_t options; |
1310 | gearman_return_t ret; |
1311 | |
1312 | - options= client->gearman->options; |
1313 | - client->gearman->options|= GEARMAN_NON_BLOCKING; |
1314 | + gearman_universal_push_non_blocking(&client->universal); |
1315 | |
1316 | switch(client->state) |
1317 | { |
1318 | @@ -623,7 +632,7 @@ |
1319 | while (1) |
1320 | { |
1321 | /* Start any new tasks. */ |
1322 | - if (client->new_tasks > 0 && !(client->options & GEARMAN_CLIENT_NO_NEW)) |
1323 | + if (client->new_tasks > 0 && ! (client->options.no_new)) |
1324 | { |
1325 | for (client->task= client->task_list; client->task != NULL; |
1326 | client->task= client->task->next) |
1327 | @@ -636,24 +645,24 @@ |
1328 | if (ret != GEARMAN_SUCCESS && ret != GEARMAN_IO_WAIT) |
1329 | { |
1330 | client->state= GEARMAN_CLIENT_STATE_NEW; |
1331 | - client->gearman->options= options; |
1332 | + gearman_universal_pop_non_blocking(&client->universal); |
1333 | return ret; |
1334 | } |
1335 | } |
1336 | |
1337 | if (client->new_tasks == 0) |
1338 | { |
1339 | - ret= gearman_flush_all(client->gearman); |
1340 | + ret= gearman_flush_all(&client->universal); |
1341 | if (ret != GEARMAN_SUCCESS) |
1342 | { |
1343 | - client->gearman->options= options; |
1344 | + gearman_universal_pop_non_blocking(&client->universal); |
1345 | return ret; |
1346 | } |
1347 | } |
1348 | } |
1349 | |
1350 | /* See if there are any connections ready for I/O. */ |
1351 | - while ((client->con= gearman_ready(client->gearman)) != NULL) |
1352 | + while ((client->con= gearman_ready(&client->universal)) != NULL) |
1353 | { |
1354 | if (client->con->revents & (POLLOUT | POLLERR | POLLHUP | POLLNVAL)) |
1355 | { |
1356 | @@ -673,7 +682,7 @@ |
1357 | if (ret != GEARMAN_SUCCESS && ret != GEARMAN_IO_WAIT) |
1358 | { |
1359 | client->state= GEARMAN_CLIENT_STATE_SUBMIT; |
1360 | - client->gearman->options= options; |
1361 | + gearman_universal_pop_non_blocking(&client->universal); |
1362 | return ret; |
1363 | } |
1364 | } |
1365 | @@ -686,7 +695,7 @@ |
1366 | while (1) |
1367 | { |
1368 | /* Read packet on connection and find which task it belongs to. */ |
1369 | - if (client->options & GEARMAN_CLIENT_UNBUFFERED_RESULT) |
1370 | + if (client->options.unbuffered_result) |
1371 | { |
1372 | /* If client is handling the data read, make sure it's complete. */ |
1373 | if (client->con->recv_state == GEARMAN_CON_RECV_STATE_READ_DATA) |
1374 | @@ -708,7 +717,7 @@ |
1375 | { |
1376 | /* Read the next packet, without buffering the data part. */ |
1377 | client->task= NULL; |
1378 | - (void)gearman_con_recv(client->con, &(client->con->packet), &ret, |
1379 | + (void)gearman_connection_recv(client->con, &(client->con->packet), &ret, |
1380 | false); |
1381 | } |
1382 | } |
1383 | @@ -716,24 +725,24 @@ |
1384 | { |
1385 | /* Read the next packet, buffering the data part. */ |
1386 | client->task= NULL; |
1387 | - (void)gearman_con_recv(client->con, &(client->con->packet), &ret, |
1388 | + (void)gearman_connection_recv(client->con, &(client->con->packet), &ret, |
1389 | true); |
1390 | } |
1391 | |
1392 | if (client->task == NULL) |
1393 | { |
1394 | - /* Check the return of the gearman_con_recv() calls above. */ |
1395 | + /* Check the return of the gearman_connection_recv() calls above. */ |
1396 | if (ret != GEARMAN_SUCCESS) |
1397 | { |
1398 | if (ret == GEARMAN_IO_WAIT) |
1399 | break; |
1400 | |
1401 | client->state= GEARMAN_CLIENT_STATE_IDLE; |
1402 | - client->gearman->options= options; |
1403 | + gearman_universal_pop_non_blocking(&client->universal); |
1404 | return ret; |
1405 | } |
1406 | |
1407 | - client->con->options|= GEARMAN_CON_PACKET_IN_USE; |
1408 | + client->con->options.packet_in_use= true; |
1409 | |
1410 | /* We have a packet, see which task it belongs to. */ |
1411 | for (client->task= client->task_list; client->task != NULL; |
1412 | @@ -752,7 +761,7 @@ |
1413 | } |
1414 | else if (client->con->packet.command == GEARMAN_COMMAND_ERROR) |
1415 | { |
1416 | - gearman_set_error(client->gearman, "gearman_client_run_tasks", |
1417 | + gearman_universal_set_error(&client->universal, "gearman_client_run_tasks", |
1418 | "%s:%.*s", |
1419 | (char *)(client->con->packet.arg[0]), |
1420 | (int)(client->con->packet.arg_size[1]), |
1421 | @@ -788,14 +797,13 @@ |
1422 | if (ret != GEARMAN_SUCCESS) |
1423 | { |
1424 | client->state= GEARMAN_CLIENT_STATE_PACKET; |
1425 | - client->gearman->options= options; |
1426 | + gearman_universal_pop_non_blocking(&client->universal); |
1427 | return ret; |
1428 | } |
1429 | |
1430 | /* Clean up the packet. */ |
1431 | gearman_packet_free(&(client->con->packet)); |
1432 | - client->con->options&= |
1433 | - (gearman_client_options_t)~GEARMAN_CON_PACKET_IN_USE; |
1434 | + client->con->options.packet_in_use= false; |
1435 | |
1436 | /* If all tasks are done, return. */ |
1437 | if (client->running_tasks == 0) |
1438 | @@ -807,23 +815,24 @@ |
1439 | if (client->running_tasks == 0) |
1440 | break; |
1441 | |
1442 | - if (client->new_tasks > 0 && !(client->options & GEARMAN_CLIENT_NO_NEW)) |
1443 | + if (client->new_tasks > 0 && ! (client->options.no_new)) |
1444 | continue; |
1445 | |
1446 | - if (options & GEARMAN_NON_BLOCKING) |
1447 | + if (gearman_universal_is_stored_non_blocking(&client->universal)) |
1448 | { |
1449 | /* Let the caller wait for activity. */ |
1450 | client->state= GEARMAN_CLIENT_STATE_IDLE; |
1451 | - client->gearman->options= options; |
1452 | + gearman_universal_pop_non_blocking(&client->universal); |
1453 | + |
1454 | return GEARMAN_IO_WAIT; |
1455 | } |
1456 | |
1457 | /* Wait for activity on one of the connections. */ |
1458 | - ret= gearman_wait(client->gearman); |
1459 | + ret= gearman_wait(&client->universal); |
1460 | if (ret != GEARMAN_SUCCESS && ret != GEARMAN_IO_WAIT) |
1461 | { |
1462 | client->state= GEARMAN_CLIENT_STATE_IDLE; |
1463 | - client->gearman->options= options; |
1464 | + gearman_universal_pop_non_blocking(&client->universal); |
1465 | return ret; |
1466 | } |
1467 | } |
1468 | @@ -831,14 +840,16 @@ |
1469 | break; |
1470 | |
1471 | default: |
1472 | - gearman_set_error(client->gearman, "gearman_client_run_tasks", |
1473 | + gearman_universal_set_error(&client->universal, "gearman_client_run_tasks", |
1474 | "unknown state: %u", client->state); |
1475 | - client->gearman->options= options; |
1476 | + gearman_universal_pop_non_blocking(&client->universal); |
1477 | + |
1478 | return GEARMAN_UNKNOWN_STATE; |
1479 | } |
1480 | |
1481 | client->state= GEARMAN_CLIENT_STATE_IDLE; |
1482 | - client->gearman->options= options; |
1483 | + gearman_universal_pop_non_blocking(&client->universal); |
1484 | + |
1485 | return GEARMAN_SUCCESS; |
1486 | } |
1487 | |
1488 | @@ -846,7 +857,7 @@ |
1489 | * Static Definitions |
1490 | */ |
1491 | |
1492 | -static gearman_client_st *_client_allocate(gearman_client_st *client) |
1493 | +static gearman_client_st *_client_allocate(gearman_client_st *client, bool is_clone) |
1494 | { |
1495 | if (client == NULL) |
1496 | { |
1497 | @@ -854,10 +865,18 @@ |
1498 | if (client == NULL) |
1499 | return NULL; |
1500 | |
1501 | - client->options= GEARMAN_CLIENT_ALLOCATED; |
1502 | + client->options.allocated= true; |
1503 | } |
1504 | else |
1505 | - client->options= 0; |
1506 | + { |
1507 | + client->options.allocated= false; |
1508 | + } |
1509 | + |
1510 | + client->options.non_blocking= false; |
1511 | + client->options.task_in_use= false; |
1512 | + client->options.unbuffered_result= false; |
1513 | + client->options.no_new= false; |
1514 | + client->options.free_tasks= false; |
1515 | |
1516 | client->state= 0; |
1517 | client->do_ret= 0; |
1518 | @@ -865,7 +884,6 @@ |
1519 | client->running_tasks= 0; |
1520 | client->task_count= 0; |
1521 | client->do_data_size= 0; |
1522 | - client->gearman= NULL; |
1523 | client->context= NULL; |
1524 | client->con= NULL; |
1525 | client->task= NULL; |
1526 | @@ -881,6 +899,18 @@ |
1527 | client->exception_fn= NULL; |
1528 | client->fail_fn= NULL; |
1529 | |
1530 | + if (! is_clone) |
1531 | + { |
1532 | + gearman_universal_st *check; |
1533 | + |
1534 | + check= gearman_universal_create(&client->universal, NULL); |
1535 | + if (check == NULL) |
1536 | + { |
1537 | + gearman_client_free(client); |
1538 | + return NULL; |
1539 | + } |
1540 | + } |
1541 | + |
1542 | return client; |
1543 | } |
1544 | |
1545 | @@ -905,7 +935,7 @@ |
1546 | const void *args[3]; |
1547 | size_t args_size[3]; |
1548 | |
1549 | - task= _task_create(client, task); |
1550 | + task= gearman_task_create(client, task); |
1551 | if (task == NULL) |
1552 | { |
1553 | *ret_ptr= GEARMAN_MEMORY_ALLOCATION_FAILURE; |
1554 | @@ -928,14 +958,14 @@ |
1555 | args[2]= workload; |
1556 | args_size[2]= workload_size; |
1557 | |
1558 | - *ret_ptr= gearman_add_packet_args(client->gearman, &(task->send), |
1559 | - GEARMAN_MAGIC_REQUEST, command, |
1560 | - args, args_size, 3); |
1561 | + *ret_ptr= gearman_packet_create_args(&client->universal, &(task->send), |
1562 | + GEARMAN_MAGIC_REQUEST, command, |
1563 | + args, args_size, 3); |
1564 | if (*ret_ptr == GEARMAN_SUCCESS) |
1565 | { |
1566 | client->new_tasks++; |
1567 | client->running_tasks++; |
1568 | - task->options|= GEARMAN_TASK_SEND_IN_USE; |
1569 | + task->options.send_in_use= true; |
1570 | } |
1571 | |
1572 | return task; |
1573 | @@ -951,16 +981,16 @@ |
1574 | switch(task->state) |
1575 | { |
1576 | case GEARMAN_TASK_STATE_NEW: |
1577 | - if (task->client->gearman->con_list == NULL) |
1578 | + if (task->client->universal.con_list == NULL) |
1579 | { |
1580 | client->new_tasks--; |
1581 | client->running_tasks--; |
1582 | - gearman_set_error(client->gearman, "_client_run_task", |
1583 | + gearman_universal_set_error(&client->universal, "_client_run_task", |
1584 | "no servers added"); |
1585 | return GEARMAN_NO_SERVERS; |
1586 | } |
1587 | |
1588 | - for (task->con= task->client->gearman->con_list; task->con != NULL; |
1589 | + for (task->con= task->client->universal.con_list; task->con != NULL; |
1590 | task->con= task->con->next) |
1591 | { |
1592 | if (task->con->send_state == GEARMAN_CON_SEND_STATE_NONE) |
1593 | @@ -969,7 +999,7 @@ |
1594 | |
1595 | if (task->con == NULL) |
1596 | { |
1597 | - client->options|= GEARMAN_CLIENT_NO_NEW; |
1598 | + client->options.no_new= true; |
1599 | return GEARMAN_IO_WAIT; |
1600 | } |
1601 | |
1602 | @@ -984,7 +1014,7 @@ |
1603 | case GEARMAN_TASK_STATE_SUBMIT: |
1604 | while (1) |
1605 | { |
1606 | - ret= gearman_con_send(task->con, &(task->send), |
1607 | + ret= gearman_connection_send(task->con, &(task->send), |
1608 | client->new_tasks == 0 ? true : false); |
1609 | if (ret == GEARMAN_SUCCESS) |
1610 | break; |
1611 | @@ -1028,8 +1058,8 @@ |
1612 | { |
1613 | if (client->workload_fn == NULL) |
1614 | { |
1615 | - gearman_set_error(client->gearman, "_client_run_task", |
1616 | - "workload size > 0, but no data pointer or workload_fn was given"); |
1617 | + gearman_universal_set_error(&client->universal, "_client_run_task", |
1618 | + "workload size > 0, but no data pointer or workload_fn was given"); |
1619 | return GEARMAN_NEED_WORKLOAD_FN; |
1620 | } |
1621 | |
1622 | @@ -1042,9 +1072,9 @@ |
1623 | } |
1624 | } |
1625 | |
1626 | - client->options&= (gearman_client_options_t)~GEARMAN_CLIENT_NO_NEW; |
1627 | + client->options.no_new= false; |
1628 | task->state= GEARMAN_TASK_STATE_WORK; |
1629 | - return gearman_con_set_events(task->con, POLLIN); |
1630 | + return gearman_connection_set_events(task->con, POLLIN); |
1631 | |
1632 | case GEARMAN_TASK_STATE_WORK: |
1633 | if (task->recv->command == GEARMAN_COMMAND_JOB_CREATED) |
1634 | @@ -1188,15 +1218,15 @@ |
1635 | break; |
1636 | |
1637 | default: |
1638 | - gearman_set_error(client->gearman, "_client_run_task", "unknown state: %u", |
1639 | - task->state); |
1640 | + gearman_universal_set_error(&client->universal, "_client_run_task", "unknown state: %u", |
1641 | + task->state); |
1642 | return GEARMAN_UNKNOWN_STATE; |
1643 | } |
1644 | |
1645 | client->running_tasks--; |
1646 | task->state= GEARMAN_TASK_STATE_FINISHED; |
1647 | |
1648 | - if (client->options & GEARMAN_CLIENT_FREE_TASKS) |
1649 | + if (client->options.free_tasks) |
1650 | gearman_task_free(task); |
1651 | |
1652 | return GEARMAN_SUCCESS; |
1653 | @@ -1207,7 +1237,7 @@ |
1654 | const void *workload, size_t workload_size, |
1655 | size_t *result_size, gearman_return_t *ret_ptr) |
1656 | { |
1657 | - if (!(client->options & GEARMAN_CLIENT_TASK_IN_USE)) |
1658 | + if (! client->options.task_in_use) |
1659 | { |
1660 | (void)_client_add_task(client, &(client->do_task), client, command, |
1661 | function_name, unique, workload, workload_size, |
1662 | @@ -1215,7 +1245,7 @@ |
1663 | if (*ret_ptr != GEARMAN_SUCCESS) |
1664 | return NULL; |
1665 | |
1666 | - client->options|= GEARMAN_CLIENT_TASK_IN_USE; |
1667 | + client->options.task_in_use= true; |
1668 | } |
1669 | |
1670 | client->workload_fn= NULL; |
1671 | @@ -1232,7 +1262,7 @@ |
1672 | client->do_ret == GEARMAN_WORK_FAIL)) |
1673 | { |
1674 | gearman_task_free(&(client->do_task)); |
1675 | - client->options&= (gearman_client_options_t)~GEARMAN_CLIENT_TASK_IN_USE; |
1676 | + client->options.task_in_use= false; |
1677 | } |
1678 | |
1679 | workload= NULL; |
1680 | @@ -1259,7 +1289,7 @@ |
1681 | { |
1682 | gearman_return_t ret; |
1683 | |
1684 | - if (!(client->options & GEARMAN_CLIENT_TASK_IN_USE)) |
1685 | + if (! client->options.task_in_use) |
1686 | { |
1687 | (void)_client_add_task(client, &(client->do_task), client, command, |
1688 | function_name, unique, workload, workload_size, |
1689 | @@ -1267,7 +1297,7 @@ |
1690 | if (ret != GEARMAN_SUCCESS) |
1691 | return ret; |
1692 | |
1693 | - client->options|= GEARMAN_CLIENT_TASK_IN_USE; |
1694 | + client->options.task_in_use= true; |
1695 | } |
1696 | |
1697 | gearman_client_clear_fn(client); |
1698 | @@ -1279,7 +1309,7 @@ |
1699 | strcpy(job_handle, client->do_task.job_handle); |
1700 | |
1701 | gearman_task_free(&(client->do_task)); |
1702 | - client->options&= (gearman_client_options_t)~GEARMAN_CLIENT_TASK_IN_USE; |
1703 | + client->options.task_in_use= false; |
1704 | } |
1705 | |
1706 | return ret; |
1707 | @@ -1330,43 +1360,3 @@ |
1708 | client->do_ret= GEARMAN_WORK_FAIL; |
1709 | return GEARMAN_SUCCESS; |
1710 | } |
1711 | - |
1712 | -static gearman_task_st *_task_create(gearman_client_st *client, |
1713 | - gearman_task_st *task) |
1714 | -{ |
1715 | - if (task == NULL) |
1716 | - { |
1717 | - task= malloc(sizeof(gearman_task_st)); |
1718 | - if (task == NULL) |
1719 | - { |
1720 | - gearman_set_error(client->gearman, "_task_create", "malloc"); |
1721 | - return NULL; |
1722 | - } |
1723 | - |
1724 | - task->options= GEARMAN_TASK_ALLOCATED; |
1725 | - } |
1726 | - else |
1727 | - task->options= 0; |
1728 | - |
1729 | - task->state= 0; |
1730 | - task->is_known= false; |
1731 | - task->is_running= false; |
1732 | - task->created_id= 0; |
1733 | - task->numerator= 0; |
1734 | - task->denominator= 0; |
1735 | - task->client= client; |
1736 | - |
1737 | - if (client->task_list != NULL) |
1738 | - client->task_list->prev= task; |
1739 | - task->next= client->task_list; |
1740 | - task->prev= NULL; |
1741 | - client->task_list= task; |
1742 | - client->task_count++; |
1743 | - |
1744 | - task->context= NULL; |
1745 | - task->con= NULL; |
1746 | - task->recv= NULL; |
1747 | - task->job_handle[0]= 0; |
1748 | - |
1749 | - return task; |
1750 | -} |
1751 | |
1752 | === modified file 'libgearman/client.h' |
1753 | --- libgearman/client.h 2009-11-06 00:38:02 +0000 |
1754 | +++ libgearman/client.h 2009-12-30 19:24:13 +0000 |
1755 | @@ -28,6 +28,49 @@ |
1756 | * @{ |
1757 | */ |
1758 | |
1759 | + |
1760 | +/** |
1761 | + * @ingroup gearman_client |
1762 | + */ |
1763 | +struct gearman_client_st |
1764 | +{ |
1765 | + struct { |
1766 | + bool allocated:1; |
1767 | + bool non_blocking:1; |
1768 | + bool task_in_use:1; |
1769 | + bool unbuffered_result:1; |
1770 | + bool no_new:1; |
1771 | + bool free_tasks:1; |
1772 | + } options; |
1773 | + enum { |
1774 | + GEARMAN_CLIENT_STATE_IDLE, |
1775 | + GEARMAN_CLIENT_STATE_NEW, |
1776 | + GEARMAN_CLIENT_STATE_SUBMIT, |
1777 | + GEARMAN_CLIENT_STATE_PACKET |
1778 | + } state; |
1779 | + gearman_return_t do_ret; |
1780 | + uint32_t new_tasks; |
1781 | + uint32_t running_tasks; |
1782 | + uint32_t task_count; |
1783 | + size_t do_data_size; |
1784 | + const void *context; |
1785 | + gearman_connection_st *con; |
1786 | + gearman_task_st *task; |
1787 | + gearman_task_st *task_list; |
1788 | + gearman_task_context_free_fn *task_context_free_fn; |
1789 | + void *do_data; |
1790 | + gearman_workload_fn *workload_fn; |
1791 | + gearman_created_fn *created_fn; |
1792 | + gearman_data_fn *data_fn; |
1793 | + gearman_warning_fn *warning_fn; |
1794 | + gearman_universal_status_fn *status_fn; |
1795 | + gearman_complete_fn *complete_fn; |
1796 | + gearman_exception_fn *exception_fn; |
1797 | + gearman_fail_fn *fail_fn; |
1798 | + gearman_universal_st universal; |
1799 | + gearman_task_st do_task; |
1800 | +}; |
1801 | + |
1802 | /** |
1803 | * Initialize a client structure. Always check the return value even if passing |
1804 | * in a pre-allocated structure. Some other initialization may have failed. It |
1805 | @@ -116,13 +159,13 @@ |
1806 | gearman_client_options_t options); |
1807 | |
1808 | /** |
1809 | - * See gearman_timeout() for details. |
1810 | + * See gearman_universal_timeout() for details. |
1811 | */ |
1812 | GEARMAN_API |
1813 | int gearman_client_timeout(gearman_client_st *client); |
1814 | |
1815 | /** |
1816 | - * See gearman_set_timeout() for details. |
1817 | + * See gearman_universal_set_timeout() for details. |
1818 | */ |
1819 | GEARMAN_API |
1820 | void gearman_client_set_timeout(gearman_client_st *client, int timeout); |
1821 | @@ -156,14 +199,6 @@ |
1822 | gearman_verbose_t verbose); |
1823 | |
1824 | /** |
1825 | - * See gearman_set_event_watch_fn() for details. |
1826 | - */ |
1827 | -GEARMAN_API |
1828 | -void gearman_client_set_event_watch_fn(gearman_client_st *client, |
1829 | - gearman_event_watch_fn *function, |
1830 | - const void *context); |
1831 | - |
1832 | -/** |
1833 | * See gearman_set_workload_malloc_fn() for details. |
1834 | */ |
1835 | GEARMAN_API |
1836 | @@ -403,15 +438,6 @@ |
1837 | */ |
1838 | |
1839 | /** |
1840 | - * Free a task structure. |
1841 | - * |
1842 | - * @param[in] task Structure previously initialized with one of the |
1843 | - * gearman_client_add_task() functions. |
1844 | - */ |
1845 | -GEARMAN_API |
1846 | -void gearman_task_free(gearman_task_st *task); |
1847 | - |
1848 | -/** |
1849 | * Free all tasks for a gearman structure. |
1850 | * |
1851 | * @param[in] client Structure previously initialized with |
1852 | @@ -601,7 +627,7 @@ |
1853 | */ |
1854 | GEARMAN_API |
1855 | void gearman_client_set_status_fn(gearman_client_st *client, |
1856 | - gearman_status_fn *function); |
1857 | + gearman_universal_status_fn *function); |
1858 | |
1859 | /** |
1860 | * Callback function when a task is complete. |
1861 | |
1862 | === renamed file 'libgearman/structs.h' => 'libgearman/command.h' |
1863 | --- libgearman/structs.h 2009-10-29 00:11:45 +0000 |
1864 | +++ libgearman/command.h 2009-12-30 19:24:13 +0000 |
1865 | @@ -8,64 +8,17 @@ |
1866 | |
1867 | /** |
1868 | * @file |
1869 | - * @brief Struct Definitions |
1870 | + * @brief Definition for gearman_command_info_st |
1871 | */ |
1872 | |
1873 | -#ifndef __GEARMAN_STRUCTS_H__ |
1874 | -#define __GEARMAN_STRUCTS_H__ |
1875 | +#ifndef __GEARMAN_COMMAND_H__ |
1876 | +#define __GEARMAN_COMMAND_H__ |
1877 | |
1878 | #ifdef __cplusplus |
1879 | extern "C" { |
1880 | #endif |
1881 | |
1882 | -/** |
1883 | - * @ingroup gearman |
1884 | - */ |
1885 | -struct gearman_st |
1886 | -{ |
1887 | - gearman_options_t options; |
1888 | - gearman_verbose_t verbose; |
1889 | - uint32_t con_count; |
1890 | - uint32_t packet_count; |
1891 | - uint32_t pfds_size; |
1892 | - uint32_t sending; |
1893 | - int last_errno; |
1894 | - int timeout; |
1895 | - gearman_con_st *con_list; |
1896 | - gearman_packet_st *packet_list; |
1897 | - struct pollfd *pfds; |
1898 | - gearman_log_fn *log_fn; |
1899 | - const void *log_context; |
1900 | - gearman_event_watch_fn *event_watch_fn; |
1901 | - const void *event_watch_context; |
1902 | - gearman_malloc_fn *workload_malloc_fn; |
1903 | - const void *workload_malloc_context; |
1904 | - gearman_free_fn *workload_free_fn; |
1905 | - const void *workload_free_context; |
1906 | - char last_error[GEARMAN_MAX_ERROR_SIZE]; |
1907 | -}; |
1908 | - |
1909 | -/** |
1910 | - * @ingroup gearman_packet |
1911 | - */ |
1912 | -struct gearman_packet_st |
1913 | -{ |
1914 | - gearman_packet_options_t options; |
1915 | - gearman_magic_t magic; |
1916 | - gearman_command_t command; |
1917 | - uint8_t argc; |
1918 | - size_t args_size; |
1919 | - size_t data_size; |
1920 | - gearman_st *gearman; |
1921 | - gearman_packet_st *next; |
1922 | - gearman_packet_st *prev; |
1923 | - uint8_t *args; |
1924 | - const void *data; |
1925 | - uint8_t *arg[GEARMAN_MAX_COMMAND_ARGS]; |
1926 | - size_t arg_size[GEARMAN_MAX_COMMAND_ARGS]; |
1927 | - uint8_t args_buffer[GEARMAN_ARGS_BUFFER_SIZE]; |
1928 | -}; |
1929 | - |
1930 | +#ifdef GEARMAN_CORE |
1931 | /** |
1932 | * @ingroup gearman_packet |
1933 | */ |
1934 | @@ -75,156 +28,10 @@ |
1935 | const uint8_t argc; |
1936 | const bool data; |
1937 | }; |
1938 | - |
1939 | -/** |
1940 | - * @ingroup gearman_con |
1941 | - */ |
1942 | -struct gearman_con_st |
1943 | -{ |
1944 | - gearman_con_options_t options; |
1945 | - gearman_con_state_t state; |
1946 | - gearman_con_send_state_t send_state; |
1947 | - gearman_con_recv_state_t recv_state; |
1948 | - in_port_t port; |
1949 | - short events; |
1950 | - short revents; |
1951 | - int fd; |
1952 | - uint32_t created_id; |
1953 | - uint32_t created_id_next; |
1954 | - size_t send_buffer_size; |
1955 | - size_t send_data_size; |
1956 | - size_t send_data_offset; |
1957 | - size_t recv_buffer_size; |
1958 | - size_t recv_data_size; |
1959 | - size_t recv_data_offset; |
1960 | - gearman_st *gearman; |
1961 | - gearman_con_st *next; |
1962 | - gearman_con_st *prev; |
1963 | - const void *context; |
1964 | - struct addrinfo *addrinfo; |
1965 | - struct addrinfo *addrinfo_next; |
1966 | - uint8_t *send_buffer_ptr; |
1967 | - gearman_packet_st *recv_packet; |
1968 | - uint8_t *recv_buffer_ptr; |
1969 | - const void *protocol_context; |
1970 | - gearman_con_protocol_context_free_fn *protocol_context_free_fn; |
1971 | - gearman_packet_pack_fn *packet_pack_fn; |
1972 | - gearman_packet_unpack_fn *packet_unpack_fn; |
1973 | - gearman_packet_st packet; |
1974 | - char host[NI_MAXHOST]; |
1975 | - uint8_t send_buffer[GEARMAN_SEND_BUFFER_SIZE]; |
1976 | - uint8_t recv_buffer[GEARMAN_RECV_BUFFER_SIZE]; |
1977 | -}; |
1978 | - |
1979 | -/** |
1980 | - * @ingroup gearman_task |
1981 | - */ |
1982 | -struct gearman_task_st |
1983 | -{ |
1984 | - gearman_task_options_t options; |
1985 | - gearman_task_state_t state; |
1986 | - bool is_known; |
1987 | - bool is_running; |
1988 | - uint32_t created_id; |
1989 | - uint32_t numerator; |
1990 | - uint32_t denominator; |
1991 | - gearman_client_st *client; |
1992 | - gearman_task_st *next; |
1993 | - gearman_task_st *prev; |
1994 | - const void *context; |
1995 | - gearman_con_st *con; |
1996 | - gearman_packet_st *recv; |
1997 | - gearman_packet_st send; |
1998 | - char job_handle[GEARMAN_JOB_HANDLE_SIZE]; |
1999 | -}; |
2000 | - |
2001 | -/** |
2002 | - * @ingroup gearman_job |
2003 | - */ |
2004 | -struct gearman_job_st |
2005 | -{ |
2006 | - gearman_job_options_t options; |
2007 | - gearman_worker_st *worker; |
2008 | - gearman_job_st *next; |
2009 | - gearman_job_st *prev; |
2010 | - gearman_con_st *con; |
2011 | - gearman_packet_st assigned; |
2012 | - gearman_packet_st work; |
2013 | -}; |
2014 | - |
2015 | -/** |
2016 | - * @ingroup gearman_client |
2017 | - */ |
2018 | -struct gearman_client_st |
2019 | -{ |
2020 | - gearman_client_options_t options; |
2021 | - gearman_client_state_t state; |
2022 | - gearman_return_t do_ret; |
2023 | - uint32_t new_tasks; |
2024 | - uint32_t running_tasks; |
2025 | - uint32_t task_count; |
2026 | - size_t do_data_size; |
2027 | - gearman_st *gearman; |
2028 | - const void *context; |
2029 | - gearman_con_st *con; |
2030 | - gearman_task_st *task; |
2031 | - gearman_task_st *task_list; |
2032 | - gearman_task_context_free_fn *task_context_free_fn; |
2033 | - void *do_data; |
2034 | - gearman_workload_fn *workload_fn; |
2035 | - gearman_created_fn *created_fn; |
2036 | - gearman_data_fn *data_fn; |
2037 | - gearman_warning_fn *warning_fn; |
2038 | - gearman_status_fn *status_fn; |
2039 | - gearman_complete_fn *complete_fn; |
2040 | - gearman_exception_fn *exception_fn; |
2041 | - gearman_fail_fn *fail_fn; |
2042 | - gearman_st gearman_static; |
2043 | - gearman_task_st do_task; |
2044 | -}; |
2045 | - |
2046 | -/** |
2047 | - * @ingroup gearman_worker |
2048 | - */ |
2049 | -struct gearman_worker_st |
2050 | -{ |
2051 | - gearman_worker_options_t options; |
2052 | - gearman_worker_state_t state; |
2053 | - gearman_worker_work_state_t work_state; |
2054 | - uint32_t function_count; |
2055 | - uint32_t job_count; |
2056 | - size_t work_result_size; |
2057 | - gearman_st *gearman; |
2058 | - const void *context; |
2059 | - gearman_con_st *con; |
2060 | - gearman_job_st *job; |
2061 | - gearman_job_st *job_list; |
2062 | - gearman_worker_function_st *function; |
2063 | - gearman_worker_function_st *function_list; |
2064 | - gearman_worker_function_st *work_function; |
2065 | - void *work_result; |
2066 | - gearman_st gearman_static; |
2067 | - gearman_packet_st grab_job; |
2068 | - gearman_packet_st pre_sleep; |
2069 | - gearman_job_st work_job; |
2070 | -}; |
2071 | - |
2072 | -/** |
2073 | - * @ingroup gearman_worker |
2074 | - */ |
2075 | -struct gearman_worker_function_st |
2076 | -{ |
2077 | - gearman_worker_function_options_t options; |
2078 | - gearman_worker_function_st *next; |
2079 | - gearman_worker_function_st *prev; |
2080 | - char *function_name; |
2081 | - gearman_worker_fn *worker_fn; |
2082 | - const void *context; |
2083 | - gearman_packet_st packet; |
2084 | -}; |
2085 | +#endif /* GEARMAN_CORE */ |
2086 | |
2087 | #ifdef __cplusplus |
2088 | } |
2089 | #endif |
2090 | |
2091 | -#endif /* __GEARMAN_STRUCTS_H__ */ |
2092 | +#endif /* __GEARMAN_COMMAND_H__ */ |
2093 | |
2094 | === modified file 'libgearman/common.h' |
2095 | --- libgearman/common.h 2009-10-29 00:11:45 +0000 |
2096 | +++ libgearman/common.h 2009-12-30 19:24:13 +0000 |
2097 | @@ -16,6 +16,7 @@ |
2098 | |
2099 | #include "config.h" |
2100 | |
2101 | +#define GEARMAN_CORE |
2102 | #include "gearman.h" |
2103 | |
2104 | #ifdef HAVE_ASSERT_H |
2105 | @@ -75,6 +76,4 @@ |
2106 | # endif |
2107 | #endif |
2108 | |
2109 | -#include "gearman_local.h" |
2110 | - |
2111 | #endif /* __GEARMAN_COMMON_H__ */ |
2112 | |
2113 | === renamed file 'libgearman/conn.c' => 'libgearman/connection.c' |
2114 | --- libgearman/conn.c 2009-10-29 20:18:00 +0000 |
2115 | +++ libgearman/connection.c 2009-12-30 19:24:13 +0000 |
2116 | @@ -13,16 +13,181 @@ |
2117 | |
2118 | #include "common.h" |
2119 | |
2120 | +static void gearman_connection_reset_addrinfo(gearman_connection_st *connection); |
2121 | + |
2122 | + |
2123 | /** |
2124 | - * @addtogroup gearman_con_static Static Connection Declarations |
2125 | - * @ingroup gearman_con |
2126 | + * @addtogroup gearman_connection_static Static Connection Declarations |
2127 | + * @ingroup gearman_connection |
2128 | * @{ |
2129 | */ |
2130 | |
2131 | + |
2132 | +gearman_connection_st *gearman_connection_create(gearman_universal_st *gearman, |
2133 | + gearman_connection_st *connection, |
2134 | + gearman_connection_options_t *options) |
2135 | +{ |
2136 | + if (connection == NULL) |
2137 | + { |
2138 | + connection= malloc(sizeof(gearman_connection_st)); |
2139 | + if (connection == NULL) |
2140 | + { |
2141 | + gearman_universal_set_error(gearman, "gearman_connection_create", "malloc"); |
2142 | + return NULL; |
2143 | + } |
2144 | + |
2145 | + connection->options.allocated= true; |
2146 | + } |
2147 | + else |
2148 | + { |
2149 | + connection->options.allocated= false; |
2150 | + } |
2151 | + |
2152 | + connection->options.ready= false; |
2153 | + connection->options.packet_in_use= false; |
2154 | + connection->options.external_fd= false; |
2155 | + connection->options.ignore_lost_connection= false; |
2156 | + connection->options.close_after_flush= false; |
2157 | + |
2158 | + if (options) |
2159 | + { |
2160 | + while (*options != GEARMAN_CON_MAX) |
2161 | + { |
2162 | + gearman_connection_set_option(connection, *options, true); |
2163 | + options++; |
2164 | + } |
2165 | + } |
2166 | + |
2167 | + |
2168 | + connection->state= 0; |
2169 | + connection->send_state= 0; |
2170 | + connection->recv_state= 0; |
2171 | + connection->port= 0; |
2172 | + connection->events= 0; |
2173 | + connection->revents= 0; |
2174 | + connection->fd= -1; |
2175 | + connection->created_id= 0; |
2176 | + connection->created_id_next= 0; |
2177 | + connection->send_buffer_size= 0; |
2178 | + connection->send_data_size= 0; |
2179 | + connection->send_data_offset= 0; |
2180 | + connection->recv_buffer_size= 0; |
2181 | + connection->recv_data_size= 0; |
2182 | + connection->recv_data_offset= 0; |
2183 | + connection->gearman= gearman; |
2184 | + |
2185 | + if (gearman->con_list != NULL) |
2186 | + gearman->con_list->prev= connection; |
2187 | + connection->next= gearman->con_list; |
2188 | + connection->prev= NULL; |
2189 | + gearman->con_list= connection; |
2190 | + gearman->con_count++; |
2191 | + |
2192 | + connection->context= NULL; |
2193 | + connection->addrinfo= NULL; |
2194 | + connection->addrinfo_next= NULL; |
2195 | + connection->send_buffer_ptr= connection->send_buffer; |
2196 | + connection->recv_packet= NULL; |
2197 | + connection->recv_buffer_ptr= connection->recv_buffer; |
2198 | + connection->protocol_context= NULL; |
2199 | + connection->protocol_context_free_fn= NULL; |
2200 | + connection->packet_pack_fn= gearman_packet_pack; |
2201 | + connection->packet_unpack_fn= gearman_packet_unpack; |
2202 | + connection->host[0]= 0; |
2203 | + |
2204 | + return connection; |
2205 | +} |
2206 | + |
2207 | +gearman_connection_st *gearman_connection_create_args(gearman_universal_st *gearman, gearman_connection_st *connection, |
2208 | + const char *host, in_port_t port) |
2209 | +{ |
2210 | + connection= gearman_connection_create(gearman, connection, NULL); |
2211 | + if (connection == NULL) |
2212 | + return NULL; |
2213 | + |
2214 | + gearman_connection_set_host(connection, host, port); |
2215 | + |
2216 | + return connection; |
2217 | +} |
2218 | + |
2219 | +gearman_connection_st *gearman_connection_clone(gearman_universal_st *gearman, gearman_connection_st *connection, |
2220 | + const gearman_connection_st *from) |
2221 | +{ |
2222 | + connection= gearman_connection_create(gearman, connection, NULL); |
2223 | + |
2224 | + if (from || connection == NULL) |
2225 | + return connection; |
2226 | + |
2227 | + connection->options.ready= from->options.ready; |
2228 | + connection->options.packet_in_use= from->options.packet_in_use; |
2229 | + connection->options.external_fd= from->options.external_fd; |
2230 | + connection->options.ignore_lost_connection= from->options.ignore_lost_connection; |
2231 | + connection->options.close_after_flush= from->options.close_after_flush; |
2232 | + |
2233 | + strcpy(connection->host, from->host); |
2234 | + connection->port= from->port; |
2235 | + |
2236 | + return connection; |
2237 | +} |
2238 | + |
2239 | +void gearman_connection_free(gearman_connection_st *connection) |
2240 | +{ |
2241 | + if (connection->fd != -1) |
2242 | + gearman_connection_close(connection); |
2243 | + |
2244 | + gearman_connection_reset_addrinfo(connection); |
2245 | + |
2246 | + if (connection->protocol_context != NULL && connection->protocol_context_free_fn != NULL) |
2247 | + connection->protocol_context_free_fn(connection, (void *)connection->protocol_context); |
2248 | + |
2249 | + if (connection->gearman->con_list == connection) |
2250 | + connection->gearman->con_list= connection->next; |
2251 | + if (connection->prev != NULL) |
2252 | + connection->prev->next= connection->next; |
2253 | + if (connection->next != NULL) |
2254 | + connection->next->prev= connection->prev; |
2255 | + connection->gearman->con_count--; |
2256 | + |
2257 | + if (connection->options.packet_in_use) |
2258 | + gearman_packet_free(&(connection->packet)); |
2259 | + |
2260 | + if (connection->options.allocated) |
2261 | + free(connection); |
2262 | +} |
2263 | + |
2264 | +gearman_return_t gearman_connection_set_option(gearman_connection_st *connection, |
2265 | + gearman_connection_options_t options, |
2266 | + bool value) |
2267 | +{ |
2268 | + switch (options) |
2269 | + { |
2270 | + case GEARMAN_CON_READY: |
2271 | + connection->options.ready= value; |
2272 | + break; |
2273 | + case GEARMAN_CON_PACKET_IN_USE: |
2274 | + connection->options.packet_in_use= value; |
2275 | + break; |
2276 | + case GEARMAN_CON_EXTERNAL_FD: |
2277 | + connection->options.external_fd= value; |
2278 | + break; |
2279 | + case GEARMAN_CON_IGNORE_LOST_CONNECTION: |
2280 | + connection->options.ignore_lost_connection= value; |
2281 | + break; |
2282 | + case GEARMAN_CON_CLOSE_AFTER_FLUSH: |
2283 | + connection->options.close_after_flush= value; |
2284 | + break; |
2285 | + case GEARMAN_CON_MAX: |
2286 | + default: |
2287 | + return GEARMAN_INVALID_COMMAND; |
2288 | + } |
2289 | + |
2290 | + return GEARMAN_SUCCESS; |
2291 | +} |
2292 | + |
2293 | /** |
2294 | * Set socket options for a connection. |
2295 | */ |
2296 | -static gearman_return_t _con_setsockopt(gearman_con_st *con); |
2297 | +static gearman_return_t _con_setsockopt(gearman_connection_st *connection); |
2298 | |
2299 | /** @} */ |
2300 | |
2301 | @@ -30,129 +195,103 @@ |
2302 | * Public Definitions |
2303 | */ |
2304 | |
2305 | -void gearman_con_set_host(gearman_con_st *con, const char *host) |
2306 | +void gearman_connection_set_host(gearman_connection_st *connection, |
2307 | + const char *host, |
2308 | + in_port_t port) |
2309 | { |
2310 | - gearman_con_reset_addrinfo(con); |
2311 | + gearman_connection_reset_addrinfo(connection); |
2312 | |
2313 | - strncpy(con->host, host == NULL ? GEARMAN_DEFAULT_TCP_HOST : host, |
2314 | + strncpy(connection->host, host == NULL ? GEARMAN_DEFAULT_TCP_HOST : host, |
2315 | NI_MAXHOST); |
2316 | - con->host[NI_MAXHOST - 1]= 0; |
2317 | -} |
2318 | - |
2319 | -void gearman_con_set_port(gearman_con_st *con, in_port_t port) |
2320 | -{ |
2321 | - gearman_con_reset_addrinfo(con); |
2322 | - |
2323 | - con->port= (in_port_t)(port == 0 ? GEARMAN_DEFAULT_TCP_PORT : port); |
2324 | -} |
2325 | - |
2326 | -gearman_con_options_t gearman_con_options(const gearman_con_st *con) |
2327 | -{ |
2328 | - return con->options; |
2329 | -} |
2330 | - |
2331 | -void gearman_con_set_options(gearman_con_st *con, |
2332 | - gearman_con_options_t options) |
2333 | -{ |
2334 | - con->options= options; |
2335 | -} |
2336 | - |
2337 | -void gearman_con_add_options(gearman_con_st *con, |
2338 | - gearman_con_options_t options) |
2339 | -{ |
2340 | - con->options|= options; |
2341 | -} |
2342 | - |
2343 | -void gearman_con_remove_options(gearman_con_st *con, |
2344 | - gearman_con_options_t options) |
2345 | -{ |
2346 | - con->options&= ~options; |
2347 | -} |
2348 | - |
2349 | -gearman_return_t gearman_con_set_fd(gearman_con_st *con, int fd) |
2350 | + connection->host[NI_MAXHOST - 1]= 0; |
2351 | + |
2352 | + connection->port= (in_port_t)(port == 0 ? GEARMAN_DEFAULT_TCP_PORT : port); |
2353 | +} |
2354 | + |
2355 | +gearman_return_t gearman_connection_set_fd(gearman_connection_st *connection, int fd) |
2356 | { |
2357 | gearman_return_t ret; |
2358 | |
2359 | - con->options|= GEARMAN_CON_EXTERNAL_FD; |
2360 | - con->fd= fd; |
2361 | - con->state= GEARMAN_CON_STATE_CONNECTED; |
2362 | + connection->options.external_fd= true; |
2363 | + connection->fd= fd; |
2364 | + connection->state= GEARMAN_CON_UNIVERSAL_CONNECTED; |
2365 | |
2366 | - ret= _con_setsockopt(con); |
2367 | + ret= _con_setsockopt(connection); |
2368 | if (ret != GEARMAN_SUCCESS) |
2369 | { |
2370 | - con->gearman->last_errno= errno; |
2371 | + connection->gearman->last_errno= errno; |
2372 | return ret; |
2373 | } |
2374 | |
2375 | return GEARMAN_SUCCESS; |
2376 | } |
2377 | |
2378 | -void *gearman_con_context(const gearman_con_st *con) |
2379 | -{ |
2380 | - return (void *)con->context; |
2381 | -} |
2382 | - |
2383 | -void gearman_con_set_context(gearman_con_st *con, const void *context) |
2384 | -{ |
2385 | - con->context= context; |
2386 | -} |
2387 | - |
2388 | -gearman_return_t gearman_con_connect(gearman_con_st *con) |
2389 | -{ |
2390 | - return gearman_con_flush(con); |
2391 | -} |
2392 | - |
2393 | -void gearman_con_close(gearman_con_st *con) |
2394 | -{ |
2395 | - if (con->fd == -1) |
2396 | +void *gearman_connection_context(const gearman_connection_st *connection) |
2397 | +{ |
2398 | + return (void *)connection->context; |
2399 | +} |
2400 | + |
2401 | +void gearman_connection_set_context(gearman_connection_st *connection, const void *context) |
2402 | +{ |
2403 | + connection->context= context; |
2404 | +} |
2405 | + |
2406 | +gearman_return_t gearman_connection_connect(gearman_connection_st *connection) |
2407 | +{ |
2408 | + return gearman_connection_flush(connection); |
2409 | +} |
2410 | + |
2411 | +void gearman_connection_close(gearman_connection_st *connection) |
2412 | +{ |
2413 | + if (connection->fd == -1) |
2414 | return; |
2415 | |
2416 | - if (con->options & GEARMAN_CON_EXTERNAL_FD) |
2417 | - con->options&= (gearman_con_options_t)~GEARMAN_CON_EXTERNAL_FD; |
2418 | + if (connection->options.external_fd) |
2419 | + connection->options.external_fd= false; |
2420 | else |
2421 | - (void)close(con->fd); |
2422 | - |
2423 | - con->state= GEARMAN_CON_STATE_ADDRINFO; |
2424 | - con->fd= -1; |
2425 | - con->events= 0; |
2426 | - con->revents= 0; |
2427 | - |
2428 | - con->send_state= GEARMAN_CON_SEND_STATE_NONE; |
2429 | - con->send_buffer_ptr= con->send_buffer; |
2430 | - con->send_buffer_size= 0; |
2431 | - con->send_data_size= 0; |
2432 | - con->send_data_offset= 0; |
2433 | - |
2434 | - con->recv_state= GEARMAN_CON_RECV_STATE_NONE; |
2435 | - if (con->recv_packet != NULL) |
2436 | - gearman_packet_free(con->recv_packet); |
2437 | - con->recv_buffer_ptr= con->recv_buffer; |
2438 | - con->recv_buffer_size= 0; |
2439 | + (void)close(connection->fd); |
2440 | + |
2441 | + connection->state= GEARMAN_CON_UNIVERSAL_ADDRINFO; |
2442 | + connection->fd= -1; |
2443 | + connection->events= 0; |
2444 | + connection->revents= 0; |
2445 | + |
2446 | + connection->send_state= GEARMAN_CON_SEND_STATE_NONE; |
2447 | + connection->send_buffer_ptr= connection->send_buffer; |
2448 | + connection->send_buffer_size= 0; |
2449 | + connection->send_data_size= 0; |
2450 | + connection->send_data_offset= 0; |
2451 | + |
2452 | + connection->recv_state= GEARMAN_CON_RECV_UNIVERSAL_NONE; |
2453 | + if (connection->recv_packet != NULL) |
2454 | + gearman_packet_free(connection->recv_packet); |
2455 | + connection->recv_buffer_ptr= connection->recv_buffer; |
2456 | + connection->recv_buffer_size= 0; |
2457 | } |
2458 | |
2459 | -void gearman_con_reset_addrinfo(gearman_con_st *con) |
2460 | +void gearman_connection_reset_addrinfo(gearman_connection_st *connection) |
2461 | { |
2462 | - if (con->addrinfo != NULL) |
2463 | + if (connection->addrinfo != NULL) |
2464 | { |
2465 | - freeaddrinfo(con->addrinfo); |
2466 | - con->addrinfo= NULL; |
2467 | + freeaddrinfo(connection->addrinfo); |
2468 | + connection->addrinfo= NULL; |
2469 | } |
2470 | |
2471 | - con->addrinfo_next= NULL; |
2472 | + connection->addrinfo_next= NULL; |
2473 | } |
2474 | |
2475 | -gearman_return_t gearman_con_send(gearman_con_st *con, |
2476 | - const gearman_packet_st *packet, bool flush) |
2477 | +gearman_return_t gearman_connection_send(gearman_connection_st *connection, |
2478 | + const gearman_packet_st *packet, bool flush) |
2479 | { |
2480 | gearman_return_t ret; |
2481 | size_t send_size; |
2482 | |
2483 | - switch (con->send_state) |
2484 | + switch (connection->send_state) |
2485 | { |
2486 | case GEARMAN_CON_SEND_STATE_NONE: |
2487 | - if (!(packet->options & GEARMAN_PACKET_COMPLETE)) |
2488 | + if (! (packet->options.complete)) |
2489 | { |
2490 | - gearman_set_error(con->gearman, "gearman_con_send", |
2491 | + gearman_universal_set_error(connection->gearman, "gearman_connection_send", |
2492 | "packet not complete"); |
2493 | return GEARMAN_INVALID_PACKET; |
2494 | } |
2495 | @@ -160,13 +299,13 @@ |
2496 | /* Pack first part of packet, which is everything but the payload. */ |
2497 | while (1) |
2498 | { |
2499 | - send_size= con->packet_pack_fn(packet, con, |
2500 | - con->send_buffer + con->send_buffer_size, |
2501 | + send_size= connection->packet_pack_fn(packet, connection, |
2502 | + connection->send_buffer + connection->send_buffer_size, |
2503 | GEARMAN_SEND_BUFFER_SIZE - |
2504 | - con->send_buffer_size, &ret); |
2505 | + connection->send_buffer_size, &ret); |
2506 | if (ret == GEARMAN_SUCCESS) |
2507 | { |
2508 | - con->send_buffer_size+= send_size; |
2509 | + connection->send_buffer_size+= send_size; |
2510 | break; |
2511 | } |
2512 | else if (ret == GEARMAN_IGNORE_PACKET) |
2513 | @@ -175,19 +314,19 @@ |
2514 | return ret; |
2515 | |
2516 | /* We were asked to flush when the buffer is already flushed! */ |
2517 | - if (con->send_buffer_size == 0) |
2518 | + if (connection->send_buffer_size == 0) |
2519 | { |
2520 | - gearman_set_error(con->gearman, "gearman_con_send", |
2521 | + gearman_universal_set_error(connection->gearman, "gearman_connection_send", |
2522 | "send buffer too small (%u)", |
2523 | GEARMAN_SEND_BUFFER_SIZE); |
2524 | return GEARMAN_SEND_BUFFER_TOO_SMALL; |
2525 | } |
2526 | |
2527 | /* Flush buffer now if first part of packet won't fit in. */ |
2528 | - con->send_state= GEARMAN_CON_SEND_STATE_PRE_FLUSH; |
2529 | + connection->send_state= GEARMAN_CON_SEND_UNIVERSAL_PRE_FLUSH; |
2530 | |
2531 | - case GEARMAN_CON_SEND_STATE_PRE_FLUSH: |
2532 | - ret= gearman_con_flush(con); |
2533 | + case GEARMAN_CON_SEND_UNIVERSAL_PRE_FLUSH: |
2534 | + ret= gearman_connection_flush(connection); |
2535 | if (ret != GEARMAN_SUCCESS) |
2536 | return ret; |
2537 | } |
2538 | @@ -198,112 +337,112 @@ |
2539 | |
2540 | /* If there is any room in the buffer, copy in data. */ |
2541 | if (packet->data != NULL && |
2542 | - (GEARMAN_SEND_BUFFER_SIZE - con->send_buffer_size) > 0) |
2543 | + (GEARMAN_SEND_BUFFER_SIZE - connection->send_buffer_size) > 0) |
2544 | { |
2545 | - con->send_data_offset= GEARMAN_SEND_BUFFER_SIZE - con->send_buffer_size; |
2546 | - if (con->send_data_offset > packet->data_size) |
2547 | - con->send_data_offset= packet->data_size; |
2548 | + connection->send_data_offset= GEARMAN_SEND_BUFFER_SIZE - connection->send_buffer_size; |
2549 | + if (connection->send_data_offset > packet->data_size) |
2550 | + connection->send_data_offset= packet->data_size; |
2551 | |
2552 | - memcpy(con->send_buffer + con->send_buffer_size, packet->data, |
2553 | - con->send_data_offset); |
2554 | - con->send_buffer_size+= con->send_data_offset; |
2555 | + memcpy(connection->send_buffer + connection->send_buffer_size, packet->data, |
2556 | + connection->send_data_offset); |
2557 | + connection->send_buffer_size+= connection->send_data_offset; |
2558 | |
2559 | /* Return if all data fit in the send buffer. */ |
2560 | - if (con->send_data_offset == packet->data_size) |
2561 | + if (connection->send_data_offset == packet->data_size) |
2562 | { |
2563 | - con->send_data_offset= 0; |
2564 | + connection->send_data_offset= 0; |
2565 | break; |
2566 | } |
2567 | } |
2568 | |
2569 | /* Flush buffer now so we can start writing directly from data buffer. */ |
2570 | - con->send_state= GEARMAN_CON_SEND_STATE_FORCE_FLUSH; |
2571 | + connection->send_state= GEARMAN_CON_SEND_UNIVERSAL_FORCE_FLUSH; |
2572 | |
2573 | - case GEARMAN_CON_SEND_STATE_FORCE_FLUSH: |
2574 | - ret= gearman_con_flush(con); |
2575 | + case GEARMAN_CON_SEND_UNIVERSAL_FORCE_FLUSH: |
2576 | + ret= gearman_connection_flush(connection); |
2577 | if (ret != GEARMAN_SUCCESS) |
2578 | return ret; |
2579 | |
2580 | - con->send_data_size= packet->data_size; |
2581 | + connection->send_data_size= packet->data_size; |
2582 | |
2583 | - /* If this is NULL, then gearman_con_send_data function will be used. */ |
2584 | + /* If this is NULL, then gearman_connection_send_data function will be used. */ |
2585 | if (packet->data == NULL) |
2586 | { |
2587 | - con->send_state= GEARMAN_CON_SEND_STATE_FLUSH_DATA; |
2588 | + connection->send_state= GEARMAN_CON_SEND_UNIVERSAL_FLUSH_DATA; |
2589 | return GEARMAN_SUCCESS; |
2590 | } |
2591 | |
2592 | /* Copy into the buffer if it fits, otherwise flush from packet buffer. */ |
2593 | - con->send_buffer_size= packet->data_size - con->send_data_offset; |
2594 | - if (con->send_buffer_size < GEARMAN_SEND_BUFFER_SIZE) |
2595 | + connection->send_buffer_size= packet->data_size - connection->send_data_offset; |
2596 | + if (connection->send_buffer_size < GEARMAN_SEND_BUFFER_SIZE) |
2597 | { |
2598 | - memcpy(con->send_buffer, |
2599 | - ((uint8_t *)(packet->data)) + con->send_data_offset, |
2600 | - con->send_buffer_size); |
2601 | - con->send_data_size= 0; |
2602 | - con->send_data_offset= 0; |
2603 | + memcpy(connection->send_buffer, |
2604 | + ((uint8_t *)(packet->data)) + connection->send_data_offset, |
2605 | + connection->send_buffer_size); |
2606 | + connection->send_data_size= 0; |
2607 | + connection->send_data_offset= 0; |
2608 | break; |
2609 | } |
2610 | |
2611 | - con->send_buffer_ptr= ((uint8_t *)(packet->data)) + con->send_data_offset; |
2612 | - con->send_state= GEARMAN_CON_SEND_STATE_FLUSH_DATA; |
2613 | + connection->send_buffer_ptr= ((uint8_t *)(packet->data)) + connection->send_data_offset; |
2614 | + connection->send_state= GEARMAN_CON_SEND_UNIVERSAL_FLUSH_DATA; |
2615 | |
2616 | - case GEARMAN_CON_SEND_STATE_FLUSH: |
2617 | - case GEARMAN_CON_SEND_STATE_FLUSH_DATA: |
2618 | - ret= gearman_con_flush(con); |
2619 | - if (ret == GEARMAN_SUCCESS && con->options & GEARMAN_CON_CLOSE_AFTER_FLUSH) |
2620 | + case GEARMAN_CON_SEND_UNIVERSAL_FLUSH: |
2621 | + case GEARMAN_CON_SEND_UNIVERSAL_FLUSH_DATA: |
2622 | + ret= gearman_connection_flush(connection); |
2623 | + if (ret == GEARMAN_SUCCESS && connection->options.close_after_flush) |
2624 | { |
2625 | - gearman_con_close(con); |
2626 | + gearman_connection_close(connection); |
2627 | ret= GEARMAN_LOST_CONNECTION; |
2628 | } |
2629 | return ret; |
2630 | |
2631 | default: |
2632 | - gearman_set_error(con->gearman, "gearman_con_send", "unknown state: %u", |
2633 | - con->send_state); |
2634 | + gearman_universal_set_error(connection->gearman, "gearman_connection_send", "unknown state: %u", |
2635 | + connection->send_state); |
2636 | return GEARMAN_UNKNOWN_STATE; |
2637 | } |
2638 | |
2639 | if (flush) |
2640 | { |
2641 | - con->send_state= GEARMAN_CON_SEND_STATE_FLUSH; |
2642 | - ret= gearman_con_flush(con); |
2643 | - if (ret == GEARMAN_SUCCESS && con->options & GEARMAN_CON_CLOSE_AFTER_FLUSH) |
2644 | + connection->send_state= GEARMAN_CON_SEND_UNIVERSAL_FLUSH; |
2645 | + ret= gearman_connection_flush(connection); |
2646 | + if (ret == GEARMAN_SUCCESS && connection->options.close_after_flush) |
2647 | { |
2648 | - gearman_con_close(con); |
2649 | + gearman_connection_close(connection); |
2650 | ret= GEARMAN_LOST_CONNECTION; |
2651 | } |
2652 | return ret; |
2653 | } |
2654 | |
2655 | - con->send_state= GEARMAN_CON_SEND_STATE_NONE; |
2656 | + connection->send_state= GEARMAN_CON_SEND_STATE_NONE; |
2657 | return GEARMAN_SUCCESS; |
2658 | } |
2659 | |
2660 | -size_t gearman_con_send_data(gearman_con_st *con, const void *data, |
2661 | - size_t data_size, gearman_return_t *ret_ptr) |
2662 | +size_t gearman_connection_send_data(gearman_connection_st *connection, const void *data, |
2663 | + size_t data_size, gearman_return_t *ret_ptr) |
2664 | { |
2665 | - if (con->send_state != GEARMAN_CON_SEND_STATE_FLUSH_DATA) |
2666 | + if (connection->send_state != GEARMAN_CON_SEND_UNIVERSAL_FLUSH_DATA) |
2667 | { |
2668 | - gearman_set_error(con->gearman, "gearman_con_send_data", "not flushing"); |
2669 | + gearman_universal_set_error(connection->gearman, "gearman_connection_send_data", "not flushing"); |
2670 | return GEARMAN_NOT_FLUSHING; |
2671 | } |
2672 | |
2673 | - if (data_size > (con->send_data_size - con->send_data_offset)) |
2674 | + if (data_size > (connection->send_data_size - connection->send_data_offset)) |
2675 | { |
2676 | - gearman_set_error(con->gearman, "gearman_con_send_data", "data too large"); |
2677 | + gearman_universal_set_error(connection->gearman, "gearman_connection_send_data", "data too large"); |
2678 | return GEARMAN_DATA_TOO_LARGE; |
2679 | } |
2680 | |
2681 | - con->send_buffer_ptr= (uint8_t *)data; |
2682 | - con->send_buffer_size= data_size; |
2683 | - |
2684 | - *ret_ptr= gearman_con_flush(con); |
2685 | - |
2686 | - return data_size - con->send_buffer_size; |
2687 | + connection->send_buffer_ptr= (uint8_t *)data; |
2688 | + connection->send_buffer_size= data_size; |
2689 | + |
2690 | + *ret_ptr= gearman_connection_flush(connection); |
2691 | + |
2692 | + return data_size - connection->send_buffer_size; |
2693 | } |
2694 | |
2695 | -gearman_return_t gearman_con_flush(gearman_con_st *con) |
2696 | +gearman_return_t gearman_connection_flush(gearman_connection_st *connection) |
2697 | { |
2698 | char port_str[NI_MAXSERV]; |
2699 | struct addrinfo ai; |
2700 | @@ -313,71 +452,71 @@ |
2701 | |
2702 | while (1) |
2703 | { |
2704 | - switch (con->state) |
2705 | + switch (connection->state) |
2706 | { |
2707 | - case GEARMAN_CON_STATE_ADDRINFO: |
2708 | - if (con->addrinfo != NULL) |
2709 | + case GEARMAN_CON_UNIVERSAL_ADDRINFO: |
2710 | + if (connection->addrinfo != NULL) |
2711 | { |
2712 | - freeaddrinfo(con->addrinfo); |
2713 | - con->addrinfo= NULL; |
2714 | + freeaddrinfo(connection->addrinfo); |
2715 | + connection->addrinfo= NULL; |
2716 | } |
2717 | |
2718 | - snprintf(port_str, NI_MAXSERV, "%u", con->port); |
2719 | + snprintf(port_str, NI_MAXSERV, "%u", connection->port); |
2720 | |
2721 | memset(&ai, 0, sizeof(struct addrinfo)); |
2722 | ai.ai_socktype= SOCK_STREAM; |
2723 | ai.ai_protocol= IPPROTO_TCP; |
2724 | |
2725 | - ret= getaddrinfo(con->host, port_str, &ai, &(con->addrinfo)); |
2726 | + ret= getaddrinfo(connection->host, port_str, &ai, &(connection->addrinfo)); |
2727 | if (ret != 0) |
2728 | { |
2729 | - gearman_set_error(con->gearman, "gearman_con_flush", "getaddrinfo:%s", |
2730 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", "getaddrinfo:%s", |
2731 | gai_strerror(ret)); |
2732 | return GEARMAN_GETADDRINFO; |
2733 | } |
2734 | |
2735 | - con->addrinfo_next= con->addrinfo; |
2736 | - |
2737 | - case GEARMAN_CON_STATE_CONNECT: |
2738 | - if (con->fd != -1) |
2739 | - gearman_con_close(con); |
2740 | - |
2741 | - if (con->addrinfo_next == NULL) |
2742 | + connection->addrinfo_next= connection->addrinfo; |
2743 | + |
2744 | + case GEARMAN_CON_UNIVERSAL_CONNECT: |
2745 | + if (connection->fd != -1) |
2746 | + gearman_connection_close(connection); |
2747 | + |
2748 | + if (connection->addrinfo_next == NULL) |
2749 | { |
2750 | - con->state= GEARMAN_CON_STATE_ADDRINFO; |
2751 | - gearman_set_error(con->gearman, "gearman_con_flush", |
2752 | + connection->state= GEARMAN_CON_UNIVERSAL_ADDRINFO; |
2753 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", |
2754 | "could not connect"); |
2755 | return GEARMAN_COULD_NOT_CONNECT; |
2756 | } |
2757 | |
2758 | - con->fd= socket(con->addrinfo_next->ai_family, |
2759 | - con->addrinfo_next->ai_socktype, |
2760 | - con->addrinfo_next->ai_protocol); |
2761 | - if (con->fd == -1) |
2762 | + connection->fd= socket(connection->addrinfo_next->ai_family, |
2763 | + connection->addrinfo_next->ai_socktype, |
2764 | + connection->addrinfo_next->ai_protocol); |
2765 | + if (connection->fd == -1) |
2766 | { |
2767 | - con->state= GEARMAN_CON_STATE_ADDRINFO; |
2768 | - gearman_set_error(con->gearman, "gearman_con_flush", "socket:%d", |
2769 | + connection->state= GEARMAN_CON_UNIVERSAL_ADDRINFO; |
2770 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", "socket:%d", |
2771 | errno); |
2772 | - con->gearman->last_errno= errno; |
2773 | + connection->gearman->last_errno= errno; |
2774 | return GEARMAN_ERRNO; |
2775 | } |
2776 | |
2777 | - gret= _con_setsockopt(con); |
2778 | + gret= _con_setsockopt(connection); |
2779 | if (gret != GEARMAN_SUCCESS) |
2780 | { |
2781 | - con->gearman->last_errno= errno; |
2782 | - gearman_con_close(con); |
2783 | + connection->gearman->last_errno= errno; |
2784 | + gearman_connection_close(connection); |
2785 | return gret; |
2786 | } |
2787 | |
2788 | while (1) |
2789 | { |
2790 | - ret= connect(con->fd, con->addrinfo_next->ai_addr, |
2791 | - con->addrinfo_next->ai_addrlen); |
2792 | + ret= connect(connection->fd, connection->addrinfo_next->ai_addr, |
2793 | + connection->addrinfo_next->ai_addrlen); |
2794 | if (ret == 0) |
2795 | { |
2796 | - con->state= GEARMAN_CON_STATE_CONNECTED; |
2797 | - con->addrinfo_next= NULL; |
2798 | + connection->state= GEARMAN_CON_UNIVERSAL_CONNECTED; |
2799 | + connection->addrinfo_next= NULL; |
2800 | break; |
2801 | } |
2802 | |
2803 | @@ -386,86 +525,86 @@ |
2804 | |
2805 | if (errno == EINPROGRESS) |
2806 | { |
2807 | - con->state= GEARMAN_CON_STATE_CONNECTING; |
2808 | + connection->state= GEARMAN_CON_UNIVERSAL_CONNECTING; |
2809 | break; |
2810 | } |
2811 | |
2812 | if (errno == ECONNREFUSED || errno == ENETUNREACH || errno == ETIMEDOUT) |
2813 | { |
2814 | - con->state= GEARMAN_CON_STATE_CONNECT; |
2815 | - con->addrinfo_next= con->addrinfo_next->ai_next; |
2816 | + connection->state= GEARMAN_CON_UNIVERSAL_CONNECT; |
2817 | + connection->addrinfo_next= connection->addrinfo_next->ai_next; |
2818 | break; |
2819 | } |
2820 | |
2821 | - gearman_set_error(con->gearman, "gearman_con_flush", "connect:%d", |
2822 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", "connect:%d", |
2823 | errno); |
2824 | - con->gearman->last_errno= errno; |
2825 | - gearman_con_close(con); |
2826 | + connection->gearman->last_errno= errno; |
2827 | + gearman_connection_close(connection); |
2828 | return GEARMAN_ERRNO; |
2829 | } |
2830 | |
2831 | - if (con->state != GEARMAN_CON_STATE_CONNECTING) |
2832 | + if (connection->state != GEARMAN_CON_UNIVERSAL_CONNECTING) |
2833 | break; |
2834 | |
2835 | - case GEARMAN_CON_STATE_CONNECTING: |
2836 | + case GEARMAN_CON_UNIVERSAL_CONNECTING: |
2837 | while (1) |
2838 | { |
2839 | - if (con->revents & POLLOUT) |
2840 | + if (connection->revents & POLLOUT) |
2841 | { |
2842 | - con->state= GEARMAN_CON_STATE_CONNECTED; |
2843 | + connection->state= GEARMAN_CON_UNIVERSAL_CONNECTED; |
2844 | break; |
2845 | } |
2846 | - else if (con->revents & (POLLERR | POLLHUP | POLLNVAL)) |
2847 | + else if (connection->revents & (POLLERR | POLLHUP | POLLNVAL)) |
2848 | { |
2849 | - con->state= GEARMAN_CON_STATE_CONNECT; |
2850 | - con->addrinfo_next= con->addrinfo_next->ai_next; |
2851 | + connection->state= GEARMAN_CON_UNIVERSAL_CONNECT; |
2852 | + connection->addrinfo_next= connection->addrinfo_next->ai_next; |
2853 | break; |
2854 | } |
2855 | |
2856 | - gret= gearman_con_set_events(con, POLLOUT); |
2857 | + gret= gearman_connection_set_events(connection, POLLOUT); |
2858 | if (gret != GEARMAN_SUCCESS) |
2859 | return gret; |
2860 | |
2861 | - if (con->gearman->options & GEARMAN_NON_BLOCKING) |
2862 | + if (gearman_universal_is_non_blocking(connection->gearman)) |
2863 | { |
2864 | - con->state= GEARMAN_CON_STATE_CONNECTING; |
2865 | + connection->state= GEARMAN_CON_UNIVERSAL_CONNECTING; |
2866 | return GEARMAN_IO_WAIT; |
2867 | } |
2868 | |
2869 | - gret= gearman_wait(con->gearman); |
2870 | + gret= gearman_wait(connection->gearman); |
2871 | if (gret != GEARMAN_SUCCESS) |
2872 | return gret; |
2873 | } |
2874 | |
2875 | - if (con->state != GEARMAN_CON_STATE_CONNECTED) |
2876 | + if (connection->state != GEARMAN_CON_UNIVERSAL_CONNECTED) |
2877 | break; |
2878 | |
2879 | - case GEARMAN_CON_STATE_CONNECTED: |
2880 | - while (con->send_buffer_size != 0) |
2881 | + case GEARMAN_CON_UNIVERSAL_CONNECTED: |
2882 | + while (connection->send_buffer_size != 0) |
2883 | { |
2884 | - write_size= write(con->fd, con->send_buffer_ptr, con->send_buffer_size); |
2885 | + write_size= write(connection->fd, connection->send_buffer_ptr, connection->send_buffer_size); |
2886 | if (write_size == 0) |
2887 | { |
2888 | - if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION)) |
2889 | + if (! (connection->options.ignore_lost_connection)) |
2890 | { |
2891 | - gearman_set_error(con->gearman, "gearman_con_flush", |
2892 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", |
2893 | "lost connection to server (EOF)"); |
2894 | } |
2895 | - gearman_con_close(con); |
2896 | + gearman_connection_close(connection); |
2897 | return GEARMAN_LOST_CONNECTION; |
2898 | } |
2899 | else if (write_size == -1) |
2900 | { |
2901 | if (errno == EAGAIN) |
2902 | { |
2903 | - gret= gearman_con_set_events(con, POLLOUT); |
2904 | + gret= gearman_connection_set_events(connection, POLLOUT); |
2905 | if (gret != GEARMAN_SUCCESS) |
2906 | return gret; |
2907 | |
2908 | - if (con->gearman->options & GEARMAN_NON_BLOCKING) |
2909 | + if (gearman_universal_is_non_blocking(connection->gearman)) |
2910 | return GEARMAN_IO_WAIT; |
2911 | |
2912 | - gret= gearman_wait(con->gearman); |
2913 | + gret= gearman_wait(connection->gearman); |
2914 | if (gret != GEARMAN_SUCCESS) |
2915 | return gret; |
2916 | |
2917 | @@ -475,124 +614,124 @@ |
2918 | continue; |
2919 | else if (errno == EPIPE || errno == ECONNRESET) |
2920 | { |
2921 | - if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION)) |
2922 | + if (! (connection->options.ignore_lost_connection)) |
2923 | { |
2924 | - gearman_set_error(con->gearman, "gearman_con_flush", |
2925 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", |
2926 | "lost connection to server (%d)", errno); |
2927 | } |
2928 | - gearman_con_close(con); |
2929 | + gearman_connection_close(connection); |
2930 | return GEARMAN_LOST_CONNECTION; |
2931 | } |
2932 | |
2933 | - gearman_set_error(con->gearman, "gearman_con_flush", "write:%d", |
2934 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", "write:%d", |
2935 | errno); |
2936 | - con->gearman->last_errno= errno; |
2937 | - gearman_con_close(con); |
2938 | + connection->gearman->last_errno= errno; |
2939 | + gearman_connection_close(connection); |
2940 | return GEARMAN_ERRNO; |
2941 | } |
2942 | |
2943 | - con->send_buffer_size-= (size_t)write_size; |
2944 | - if (con->send_state == GEARMAN_CON_SEND_STATE_FLUSH_DATA) |
2945 | + connection->send_buffer_size-= (size_t)write_size; |
2946 | + if (connection->send_state == GEARMAN_CON_SEND_UNIVERSAL_FLUSH_DATA) |
2947 | { |
2948 | - con->send_data_offset+= (size_t)write_size; |
2949 | - if (con->send_data_offset == con->send_data_size) |
2950 | + connection->send_data_offset+= (size_t)write_size; |
2951 | + if (connection->send_data_offset == connection->send_data_size) |
2952 | { |
2953 | - con->send_data_size= 0; |
2954 | - con->send_data_offset= 0; |
2955 | + connection->send_data_size= 0; |
2956 | + connection->send_data_offset= 0; |
2957 | break; |
2958 | } |
2959 | |
2960 | - if (con->send_buffer_size == 0) |
2961 | + if (connection->send_buffer_size == 0) |
2962 | return GEARMAN_SUCCESS; |
2963 | } |
2964 | - else if (con->send_buffer_size == 0) |
2965 | + else if (connection->send_buffer_size == 0) |
2966 | break; |
2967 | |
2968 | - con->send_buffer_ptr+= write_size; |
2969 | + connection->send_buffer_ptr+= write_size; |
2970 | } |
2971 | |
2972 | - con->send_state= GEARMAN_CON_SEND_STATE_NONE; |
2973 | - con->send_buffer_ptr= con->send_buffer; |
2974 | + connection->send_state= GEARMAN_CON_SEND_STATE_NONE; |
2975 | + connection->send_buffer_ptr= connection->send_buffer; |
2976 | return GEARMAN_SUCCESS; |
2977 | |
2978 | default: |
2979 | - gearman_set_error(con->gearman, "gearman_con_flush", "unknown state: %u", |
2980 | - con->state); |
2981 | + gearman_universal_set_error(connection->gearman, "gearman_connection_flush", "unknown state: %u", |
2982 | + connection->state); |
2983 | |
2984 | return GEARMAN_UNKNOWN_STATE; |
2985 | } |
2986 | } |
2987 | } |
2988 | |
2989 | -gearman_packet_st *gearman_con_recv(gearman_con_st *con, |
2990 | - gearman_packet_st *packet, |
2991 | - gearman_return_t *ret_ptr, bool recv_data) |
2992 | +gearman_packet_st *gearman_connection_recv(gearman_connection_st *connection, |
2993 | + gearman_packet_st *packet, |
2994 | + gearman_return_t *ret_ptr, bool recv_data) |
2995 | { |
2996 | size_t recv_size; |
2997 | |
2998 | - switch (con->recv_state) |
2999 | + switch (connection->recv_state) |
3000 | { |
3001 | - case GEARMAN_CON_RECV_STATE_NONE: |
3002 | - if (con->state != GEARMAN_CON_STATE_CONNECTED) |
3003 | + case GEARMAN_CON_RECV_UNIVERSAL_NONE: |
3004 | + if (connection->state != GEARMAN_CON_UNIVERSAL_CONNECTED) |
3005 | { |
3006 | - gearman_set_error(con->gearman, "gearman_con_recv", "not connected"); |
3007 | + gearman_universal_set_error(connection->gearman, "gearman_connection_recv", "not connected"); |
3008 | *ret_ptr= GEARMAN_NOT_CONNECTED; |
3009 | return NULL; |
3010 | } |
3011 | |
3012 | - con->recv_packet= gearman_add_packet(con->gearman, packet); |
3013 | - if (con->recv_packet == NULL) |
3014 | + connection->recv_packet= gearman_packet_create(connection->gearman, packet); |
3015 | + if (connection->recv_packet == NULL) |
3016 | { |
3017 | *ret_ptr= GEARMAN_MEMORY_ALLOCATION_FAILURE; |
3018 | return NULL; |
3019 | } |
3020 | |
3021 | - con->recv_state= GEARMAN_CON_RECV_STATE_READ; |
3022 | + connection->recv_state= GEARMAN_CON_RECV_UNIVERSAL_READ; |
3023 | |
3024 | - case GEARMAN_CON_RECV_STATE_READ: |
3025 | + case GEARMAN_CON_RECV_UNIVERSAL_READ: |
3026 | while (1) |
3027 | { |
3028 | - if (con->recv_buffer_size > 0) |
3029 | + if (connection->recv_buffer_size > 0) |
3030 | { |
3031 | - recv_size= con->packet_unpack_fn(con->recv_packet, con, |
3032 | - con->recv_buffer_ptr, |
3033 | - con->recv_buffer_size, ret_ptr); |
3034 | - con->recv_buffer_ptr+= recv_size; |
3035 | - con->recv_buffer_size-= recv_size; |
3036 | + recv_size= connection->packet_unpack_fn(connection->recv_packet, connection, |
3037 | + connection->recv_buffer_ptr, |
3038 | + connection->recv_buffer_size, ret_ptr); |
3039 | + connection->recv_buffer_ptr+= recv_size; |
3040 | + connection->recv_buffer_size-= recv_size; |
3041 | if (*ret_ptr == GEARMAN_SUCCESS) |
3042 | break; |
3043 | else if (*ret_ptr != GEARMAN_IO_WAIT) |
3044 | { |
3045 | - gearman_con_close(con); |
3046 | + gearman_connection_close(connection); |
3047 | return NULL; |
3048 | } |
3049 | } |
3050 | |
3051 | /* Shift buffer contents if needed. */ |
3052 | - if (con->recv_buffer_size > 0) |
3053 | - memmove(con->recv_buffer, con->recv_buffer_ptr, con->recv_buffer_size); |
3054 | - con->recv_buffer_ptr= con->recv_buffer; |
3055 | + if (connection->recv_buffer_size > 0) |
3056 | + memmove(connection->recv_buffer, connection->recv_buffer_ptr, connection->recv_buffer_size); |
3057 | + connection->recv_buffer_ptr= connection->recv_buffer; |
3058 | |
3059 | - recv_size= gearman_con_read(con, con->recv_buffer + con->recv_buffer_size, |
3060 | - GEARMAN_RECV_BUFFER_SIZE - con->recv_buffer_size, |
3061 | - ret_ptr); |
3062 | + recv_size= gearman_connection_read(connection, connection->recv_buffer + connection->recv_buffer_size, |
3063 | + GEARMAN_RECV_BUFFER_SIZE - connection->recv_buffer_size, |
3064 | + ret_ptr); |
3065 | if (*ret_ptr != GEARMAN_SUCCESS) |
3066 | return NULL; |
3067 | |
3068 | - con->recv_buffer_size+= recv_size; |
3069 | + connection->recv_buffer_size+= recv_size; |
3070 | } |
3071 | |
3072 | if (packet->data_size == 0) |
3073 | { |
3074 | - con->recv_state= GEARMAN_CON_RECV_STATE_NONE; |
3075 | + connection->recv_state= GEARMAN_CON_RECV_UNIVERSAL_NONE; |
3076 | break; |
3077 | } |
3078 | |
3079 | - con->recv_data_size= packet->data_size; |
3080 | + connection->recv_data_size= packet->data_size; |
3081 | |
3082 | if (!recv_data) |
3083 | { |
3084 | - con->recv_state= GEARMAN_CON_RECV_STATE_READ_DATA; |
3085 | + connection->recv_state= GEARMAN_CON_RECV_STATE_READ_DATA; |
3086 | break; |
3087 | } |
3088 | |
3089 | @@ -601,110 +740,110 @@ |
3090 | else |
3091 | { |
3092 | packet->data= packet->gearman->workload_malloc_fn(packet->data_size, |
3093 | - (void *)packet->gearman->workload_malloc_context); |
3094 | + (void *)packet->gearman->workload_malloc_context); |
3095 | } |
3096 | if (packet->data == NULL) |
3097 | { |
3098 | *ret_ptr= GEARMAN_MEMORY_ALLOCATION_FAILURE; |
3099 | - gearman_con_close(con); |
3100 | + gearman_connection_close(connection); |
3101 | return NULL; |
3102 | } |
3103 | |
3104 | - packet->options|= GEARMAN_PACKET_FREE_DATA; |
3105 | - con->recv_state= GEARMAN_CON_RECV_STATE_READ_DATA; |
3106 | + packet->options.free_data= true; |
3107 | + connection->recv_state= GEARMAN_CON_RECV_STATE_READ_DATA; |
3108 | |
3109 | case GEARMAN_CON_RECV_STATE_READ_DATA: |
3110 | - while (con->recv_data_size != 0) |
3111 | + while (connection->recv_data_size != 0) |
3112 | { |
3113 | - (void)gearman_con_recv_data(con, |
3114 | - ((uint8_t *)(packet->data)) + |
3115 | - con->recv_data_offset, |
3116 | - packet->data_size - |
3117 | - con->recv_data_offset, ret_ptr); |
3118 | + (void)gearman_connection_recv_data(connection, |
3119 | + ((uint8_t *)(packet->data)) + |
3120 | + connection->recv_data_offset, |
3121 | + packet->data_size - |
3122 | + connection->recv_data_offset, ret_ptr); |
3123 | if (*ret_ptr != GEARMAN_SUCCESS) |
3124 | return NULL; |
3125 | } |
3126 | |
3127 | - con->recv_state= GEARMAN_CON_RECV_STATE_NONE; |
3128 | + connection->recv_state= GEARMAN_CON_RECV_UNIVERSAL_NONE; |
3129 | break; |
3130 | |
3131 | default: |
3132 | - gearman_set_error(con->gearman, "gearman_con_recv", "unknown state: %u", |
3133 | - con->recv_state); |
3134 | + gearman_universal_set_error(connection->gearman, "gearman_connection_recv", "unknown state: %u", |
3135 | + connection->recv_state); |
3136 | *ret_ptr= GEARMAN_UNKNOWN_STATE; |
3137 | return NULL; |
3138 | } |
3139 | |
3140 | - packet= con->recv_packet; |
3141 | - con->recv_packet= NULL; |
3142 | + packet= connection->recv_packet; |
3143 | + connection->recv_packet= NULL; |
3144 | |
3145 | return packet; |
3146 | } |
3147 | |
3148 | -size_t gearman_con_recv_data(gearman_con_st *con, void *data, size_t data_size, |
3149 | - gearman_return_t *ret_ptr) |
3150 | +size_t gearman_connection_recv_data(gearman_connection_st *connection, void *data, size_t data_size, |
3151 | + gearman_return_t *ret_ptr) |
3152 | { |
3153 | size_t recv_size= 0; |
3154 | |
3155 | - if (con->recv_data_size == 0) |
3156 | + if (connection->recv_data_size == 0) |
3157 | { |
3158 | *ret_ptr= GEARMAN_SUCCESS; |
3159 | return 0; |
3160 | } |
3161 | |
3162 | - if ((con->recv_data_size - con->recv_data_offset) < data_size) |
3163 | - data_size= con->recv_data_size - con->recv_data_offset; |
3164 | + if ((connection->recv_data_size - connection->recv_data_offset) < data_size) |
3165 | + data_size= connection->recv_data_size - connection->recv_data_offset; |
3166 | |
3167 | - if (con->recv_buffer_size > 0) |
3168 | + if (connection->recv_buffer_size > 0) |
3169 | { |
3170 | - if (con->recv_buffer_size < data_size) |
3171 | - recv_size= con->recv_buffer_size; |
3172 | + if (connection->recv_buffer_size < data_size) |
3173 | + recv_size= connection->recv_buffer_size; |
3174 | else |
3175 | recv_size= data_size; |
3176 | |
3177 | - memcpy(data, con->recv_buffer_ptr, recv_size); |
3178 | - con->recv_buffer_ptr+= recv_size; |
3179 | - con->recv_buffer_size-= recv_size; |
3180 | + memcpy(data, connection->recv_buffer_ptr, recv_size); |
3181 | + connection->recv_buffer_ptr+= recv_size; |
3182 | + connection->recv_buffer_size-= recv_size; |
3183 | } |
3184 | |
3185 | if (data_size != recv_size) |
3186 | { |
3187 | - recv_size+= gearman_con_read(con, ((uint8_t *)data) + recv_size, |
3188 | - data_size - recv_size, ret_ptr); |
3189 | - con->recv_data_offset+= recv_size; |
3190 | + recv_size+= gearman_connection_read(connection, ((uint8_t *)data) + recv_size, |
3191 | + data_size - recv_size, ret_ptr); |
3192 | + connection->recv_data_offset+= recv_size; |
3193 | } |
3194 | else |
3195 | { |
3196 | - con->recv_data_offset+= recv_size; |
3197 | + connection->recv_data_offset+= recv_size; |
3198 | *ret_ptr= GEARMAN_SUCCESS; |
3199 | } |
3200 | |
3201 | - if (con->recv_data_size == con->recv_data_offset) |
3202 | + if (connection->recv_data_size == connection->recv_data_offset) |
3203 | { |
3204 | - con->recv_data_size= 0; |
3205 | - con->recv_data_offset= 0; |
3206 | - con->recv_state= GEARMAN_CON_RECV_STATE_NONE; |
3207 | + connection->recv_data_size= 0; |
3208 | + connection->recv_data_offset= 0; |
3209 | + connection->recv_state= GEARMAN_CON_RECV_UNIVERSAL_NONE; |
3210 | } |
3211 | |
3212 | return recv_size; |
3213 | } |
3214 | |
3215 | -size_t gearman_con_read(gearman_con_st *con, void *data, size_t data_size, |
3216 | - gearman_return_t *ret_ptr) |
3217 | +size_t gearman_connection_read(gearman_connection_st *connection, void *data, size_t data_size, |
3218 | + gearman_return_t *ret_ptr) |
3219 | { |
3220 | ssize_t read_size; |
3221 | |
3222 | while (1) |
3223 | { |
3224 | - read_size= read(con->fd, data, data_size); |
3225 | + read_size= read(connection->fd, data, data_size); |
3226 | if (read_size == 0) |
3227 | { |
3228 | - if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION)) |
3229 | + if (! (connection->options.ignore_lost_connection)) |
3230 | { |
3231 | - gearman_set_error(con->gearman, "gearman_con_read", |
3232 | + gearman_universal_set_error(connection->gearman, "gearman_connection_read", |
3233 | "lost connection to server (EOF)"); |
3234 | } |
3235 | - gearman_con_close(con); |
3236 | + gearman_connection_close(connection); |
3237 | *ret_ptr= GEARMAN_LOST_CONNECTION; |
3238 | return 0; |
3239 | } |
3240 | @@ -712,17 +851,17 @@ |
3241 | { |
3242 | if (errno == EAGAIN) |
3243 | { |
3244 | - *ret_ptr= gearman_con_set_events(con, POLLIN); |
3245 | + *ret_ptr= gearman_connection_set_events(connection, POLLIN); |
3246 | if (*ret_ptr != GEARMAN_SUCCESS) |
3247 | return 0; |
3248 | |
3249 | - if (con->gearman->options & GEARMAN_NON_BLOCKING) |
3250 | + if (gearman_universal_is_non_blocking(connection->gearman)) |
3251 | { |
3252 | *ret_ptr= GEARMAN_IO_WAIT; |
3253 | return 0; |
3254 | } |
3255 | |
3256 | - *ret_ptr= gearman_wait(con->gearman); |
3257 | + *ret_ptr= gearman_wait(connection->gearman); |
3258 | if (*ret_ptr != GEARMAN_SUCCESS) |
3259 | return 0; |
3260 | |
3261 | @@ -732,21 +871,21 @@ |
3262 | continue; |
3263 | else if (errno == EPIPE || errno == ECONNRESET) |
3264 | { |
3265 | - if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION)) |
3266 | + if (! (connection->options.ignore_lost_connection)) |
3267 | { |
3268 | - gearman_set_error(con->gearman, "gearman_con_read", |
3269 | + gearman_universal_set_error(connection->gearman, "gearman_connection_read", |
3270 | "lost connection to server (%d)", errno); |
3271 | } |
3272 | *ret_ptr= GEARMAN_LOST_CONNECTION; |
3273 | } |
3274 | else |
3275 | { |
3276 | - gearman_set_error(con->gearman, "gearman_con_read", "read:%d", errno); |
3277 | - con->gearman->last_errno= errno; |
3278 | + gearman_universal_set_error(connection->gearman, "gearman_connection_read", "read:%d", errno); |
3279 | + connection->gearman->last_errno= errno; |
3280 | *ret_ptr= GEARMAN_ERRNO; |
3281 | } |
3282 | |
3283 | - gearman_con_close(con); |
3284 | + gearman_connection_close(connection); |
3285 | return 0; |
3286 | } |
3287 | |
3288 | @@ -757,22 +896,22 @@ |
3289 | return (size_t)read_size; |
3290 | } |
3291 | |
3292 | -gearman_return_t gearman_con_set_events(gearman_con_st *con, short events) |
3293 | +gearman_return_t gearman_connection_set_events(gearman_connection_st *connection, short events) |
3294 | { |
3295 | gearman_return_t ret; |
3296 | |
3297 | - if ((con->events | events) == con->events) |
3298 | + if ((connection->events | events) == connection->events) |
3299 | return GEARMAN_SUCCESS; |
3300 | |
3301 | - con->events|= events; |
3302 | + connection->events|= events; |
3303 | |
3304 | - if (con->gearman->event_watch_fn != NULL) |
3305 | + if (connection->gearman->event_watch_fn != NULL) |
3306 | { |
3307 | - ret= con->gearman->event_watch_fn(con, con->events, |
3308 | - (void *)con->gearman->event_watch_context); |
3309 | + ret= connection->gearman->event_watch_fn(connection, connection->events, |
3310 | + (void *)connection->gearman->event_watch_context); |
3311 | if (ret != GEARMAN_SUCCESS) |
3312 | { |
3313 | - gearman_con_close(con); |
3314 | + gearman_connection_close(connection); |
3315 | return ret; |
3316 | } |
3317 | } |
3318 | @@ -780,145 +919,145 @@ |
3319 | return GEARMAN_SUCCESS; |
3320 | } |
3321 | |
3322 | -gearman_return_t gearman_con_set_revents(gearman_con_st *con, short revents) |
3323 | +gearman_return_t gearman_connection_set_revents(gearman_connection_st *connection, short revents) |
3324 | { |
3325 | gearman_return_t ret; |
3326 | |
3327 | if (revents != 0) |
3328 | - con->options|= GEARMAN_CON_READY; |
3329 | + connection->options.ready= true; |
3330 | |
3331 | - con->revents= revents; |
3332 | + connection->revents= revents; |
3333 | |
3334 | /* Remove external POLLOUT watch if we didn't ask for it. Otherwise we spin |
3335 | - forever until another POLLIN state change. This is much more efficient |
3336 | - than removing POLLOUT on every state change since some external polling |
3337 | - mechanisms need to use a system call to change flags (like Linux epoll). */ |
3338 | - if (revents & POLLOUT && !(con->events & POLLOUT) && |
3339 | - con->gearman->event_watch_fn != NULL) |
3340 | + forever until another POLLIN state change. This is much more efficient |
3341 | + than removing POLLOUT on every state change since some external polling |
3342 | + mechanisms need to use a system call to change flags (like Linux epoll). */ |
3343 | + if (revents & POLLOUT && !(connection->events & POLLOUT) && |
3344 | + connection->gearman->event_watch_fn != NULL) |
3345 | { |
3346 | - ret= con->gearman->event_watch_fn(con, con->events, |
3347 | - (void *)con->gearman->event_watch_context); |
3348 | + ret= connection->gearman->event_watch_fn(connection, connection->events, |
3349 | + (void *)connection->gearman->event_watch_context); |
3350 | if (ret != GEARMAN_SUCCESS) |
3351 | { |
3352 | - gearman_con_close(con); |
3353 | + gearman_connection_close(connection); |
3354 | return ret; |
3355 | } |
3356 | } |
3357 | |
3358 | - con->events&= (short)~revents; |
3359 | + connection->events&= (short)~revents; |
3360 | |
3361 | return GEARMAN_SUCCESS; |
3362 | } |
3363 | |
3364 | -void *gearman_con_protocol_context(const gearman_con_st *con) |
3365 | -{ |
3366 | - return (void *)con->protocol_context; |
3367 | -} |
3368 | - |
3369 | -void gearman_con_set_protocol_context(gearman_con_st *con, const void *context) |
3370 | -{ |
3371 | - con->protocol_context= context; |
3372 | -} |
3373 | - |
3374 | -void gearman_con_set_protocol_context_free_fn(gearman_con_st *con, |
3375 | - gearman_con_protocol_context_free_fn *function) |
3376 | -{ |
3377 | - con->protocol_context_free_fn= function; |
3378 | -} |
3379 | - |
3380 | -void gearman_con_set_packet_pack_fn(gearman_con_st *con, |
3381 | - gearman_packet_pack_fn *function) |
3382 | -{ |
3383 | - con->packet_pack_fn= function; |
3384 | -} |
3385 | - |
3386 | -void gearman_con_set_packet_unpack_fn(gearman_con_st *con, |
3387 | - gearman_packet_unpack_fn *function) |
3388 | -{ |
3389 | - con->packet_unpack_fn= function; |
3390 | +void *gearman_connection_protocol_context(const gearman_connection_st *connection) |
3391 | +{ |
3392 | + return (void *)connection->protocol_context; |
3393 | +} |
3394 | + |
3395 | +void gearman_connection_set_protocol_context(gearman_connection_st *connection, const void *context) |
3396 | +{ |
3397 | + connection->protocol_context= context; |
3398 | +} |
3399 | + |
3400 | +void gearman_connection_set_protocol_context_free_fn(gearman_connection_st *connection, |
3401 | + gearman_connection_protocol_context_free_fn *function) |
3402 | +{ |
3403 | + connection->protocol_context_free_fn= function; |
3404 | +} |
3405 | + |
3406 | +void gearman_connection_set_packet_pack_fn(gearman_connection_st *connection, |
3407 | + gearman_packet_pack_fn *function) |
3408 | +{ |
3409 | + connection->packet_pack_fn= function; |
3410 | +} |
3411 | + |
3412 | +void gearman_connection_set_packet_unpack_fn(gearman_connection_st *connection, |
3413 | + gearman_packet_unpack_fn *function) |
3414 | +{ |
3415 | + connection->packet_unpack_fn= function; |
3416 | } |
3417 | |
3418 | /* |
3419 | * Static Definitions |
3420 | */ |
3421 | |
3422 | -static gearman_return_t _con_setsockopt(gearman_con_st *con) |
3423 | +static gearman_return_t _con_setsockopt(gearman_connection_st *connection) |
3424 | { |
3425 | int ret; |
3426 | struct linger linger; |
3427 | struct timeval waittime; |
3428 | |
3429 | ret= 1; |
3430 | - ret= setsockopt(con->fd, IPPROTO_TCP, TCP_NODELAY, &ret, |
3431 | + ret= setsockopt(connection->fd, IPPROTO_TCP, TCP_NODELAY, &ret, |
3432 | (socklen_t)sizeof(int)); |
3433 | if (ret == -1 && errno != EOPNOTSUPP) |
3434 | { |
3435 | - gearman_set_error(con->gearman, "_con_setsockopt", |
3436 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", |
3437 | "setsockopt:TCP_NODELAY:%d", errno); |
3438 | return GEARMAN_ERRNO; |
3439 | } |
3440 | |
3441 | linger.l_onoff= 1; |
3442 | linger.l_linger= GEARMAN_DEFAULT_SOCKET_TIMEOUT; |
3443 | - ret= setsockopt(con->fd, SOL_SOCKET, SO_LINGER, &linger, |
3444 | + ret= setsockopt(connection->fd, SOL_SOCKET, SO_LINGER, &linger, |
3445 | (socklen_t)sizeof(struct linger)); |
3446 | if (ret == -1) |
3447 | { |
3448 | - gearman_set_error(con->gearman, "_con_setsockopt", |
3449 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", |
3450 | "setsockopt:SO_LINGER:%d", errno); |
3451 | return GEARMAN_ERRNO; |
3452 | } |
3453 | |
3454 | waittime.tv_sec= GEARMAN_DEFAULT_SOCKET_TIMEOUT; |
3455 | waittime.tv_usec= 0; |
3456 | - ret= setsockopt(con->fd, SOL_SOCKET, SO_SNDTIMEO, &waittime, |
3457 | + ret= setsockopt(connection->fd, SOL_SOCKET, SO_SNDTIMEO, &waittime, |
3458 | (socklen_t)sizeof(struct timeval)); |
3459 | if (ret == -1 && errno != ENOPROTOOPT) |
3460 | { |
3461 | - gearman_set_error(con->gearman, "_con_setsockopt", |
3462 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", |
3463 | "setsockopt:SO_SNDTIMEO:%d", errno); |
3464 | return GEARMAN_ERRNO; |
3465 | } |
3466 | |
3467 | - ret= setsockopt(con->fd, SOL_SOCKET, SO_RCVTIMEO, &waittime, |
3468 | + ret= setsockopt(connection->fd, SOL_SOCKET, SO_RCVTIMEO, &waittime, |
3469 | (socklen_t)sizeof(struct timeval)); |
3470 | if (ret == -1 && errno != ENOPROTOOPT) |
3471 | { |
3472 | - gearman_set_error(con->gearman, "_con_setsockopt", |
3473 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", |
3474 | "setsockopt:SO_RCVTIMEO:%d", errno); |
3475 | return GEARMAN_ERRNO; |
3476 | } |
3477 | |
3478 | ret= GEARMAN_DEFAULT_SOCKET_SEND_SIZE; |
3479 | - ret= setsockopt(con->fd, SOL_SOCKET, SO_SNDBUF, &ret, (socklen_t)sizeof(int)); |
3480 | + ret= setsockopt(connection->fd, SOL_SOCKET, SO_SNDBUF, &ret, (socklen_t)sizeof(int)); |
3481 | if (ret == -1) |
3482 | { |
3483 | - gearman_set_error(con->gearman, "_con_setsockopt", |
3484 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", |
3485 | "setsockopt:SO_SNDBUF:%d", errno); |
3486 | return GEARMAN_ERRNO; |
3487 | } |
3488 | |
3489 | ret= GEARMAN_DEFAULT_SOCKET_RECV_SIZE; |
3490 | - ret= setsockopt(con->fd, SOL_SOCKET, SO_RCVBUF, &ret, (socklen_t)sizeof(int)); |
3491 | + ret= setsockopt(connection->fd, SOL_SOCKET, SO_RCVBUF, &ret, (socklen_t)sizeof(int)); |
3492 | if (ret == -1) |
3493 | { |
3494 | - gearman_set_error(con->gearman, "_con_setsockopt", |
3495 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", |
3496 | "setsockopt:SO_RCVBUF:%d", errno); |
3497 | return GEARMAN_ERRNO; |
3498 | } |
3499 | |
3500 | - ret= fcntl(con->fd, F_GETFL, 0); |
3501 | + ret= fcntl(connection->fd, F_GETFL, 0); |
3502 | if (ret == -1) |
3503 | { |
3504 | - gearman_set_error(con->gearman, "_con_setsockopt", "fcntl:F_GETFL:%d", |
3505 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", "fcntl:F_GETFL:%d", |
3506 | errno); |
3507 | return GEARMAN_ERRNO; |
3508 | } |
3509 | |
3510 | - ret= fcntl(con->fd, F_SETFL, ret | O_NONBLOCK); |
3511 | + ret= fcntl(connection->fd, F_SETFL, ret | O_NONBLOCK); |
3512 | if (ret == -1) |
3513 | { |
3514 | - gearman_set_error(con->gearman, "_con_setsockopt", "fcntl:F_SETFL:%d", |
3515 | + gearman_universal_set_error(connection->gearman, "_con_setsockopt", "fcntl:F_SETFL:%d", |
3516 | errno); |
3517 | return GEARMAN_ERRNO; |
3518 | } |
3519 | |
3520 | === renamed file 'libgearman/conn.h' => 'libgearman/connection.h' |
3521 | --- libgearman/conn.h 2009-10-29 00:11:45 +0000 |
3522 | +++ libgearman/connection.h 2009-12-30 19:24:13 +0000 |
3523 | @@ -11,8 +11,8 @@ |
3524 | * @brief Connection Declarations |
3525 | */ |
3526 | |
3527 | -#ifndef __GEARMAN_CON_H__ |
3528 | -#define __GEARMAN_CON_H__ |
3529 | +#ifndef __GEARMAN_CONNECTION_H__ |
3530 | +#define __GEARMAN_CONNECTION_H__ |
3531 | |
3532 | #ifdef __cplusplus |
3533 | extern "C" { |
3534 | @@ -20,7 +20,7 @@ |
3535 | |
3536 | /** |
3537 | * @addtogroup gearman_con Connection Declarations |
3538 | - * @ingroup gearman |
3539 | + * @ingroup gearman_universal |
3540 | * |
3541 | * This is a low level interface for gearman connections. This is used |
3542 | * internally by both client and worker interfaces, so you probably want to |
3543 | @@ -31,172 +31,263 @@ |
3544 | */ |
3545 | |
3546 | /** |
3547 | + * @ingroup gearman_connection |
3548 | + */ |
3549 | +struct gearman_connection_st |
3550 | +{ |
3551 | + struct { |
3552 | + bool allocated:1; |
3553 | + bool ready:1; |
3554 | + bool packet_in_use:1; |
3555 | + bool external_fd:1; |
3556 | + bool ignore_lost_connection:1; |
3557 | + bool close_after_flush:1; |
3558 | + } options; |
3559 | + enum { |
3560 | + GEARMAN_CON_UNIVERSAL_ADDRINFO, |
3561 | + GEARMAN_CON_UNIVERSAL_CONNECT, |
3562 | + GEARMAN_CON_UNIVERSAL_CONNECTING, |
3563 | + GEARMAN_CON_UNIVERSAL_CONNECTED |
3564 | + } state; |
3565 | + enum { |
3566 | + GEARMAN_CON_SEND_STATE_NONE, |
3567 | + GEARMAN_CON_SEND_UNIVERSAL_PRE_FLUSH, |
3568 | + GEARMAN_CON_SEND_UNIVERSAL_FORCE_FLUSH, |
3569 | + GEARMAN_CON_SEND_UNIVERSAL_FLUSH, |
3570 | + GEARMAN_CON_SEND_UNIVERSAL_FLUSH_DATA |
3571 | + } send_state; |
3572 | + enum { |
3573 | + GEARMAN_CON_RECV_UNIVERSAL_NONE, |
3574 | + GEARMAN_CON_RECV_UNIVERSAL_READ, |
3575 | + GEARMAN_CON_RECV_STATE_READ_DATA |
3576 | + } recv_state; |
3577 | + in_port_t port; |
3578 | + short events; |
3579 | + short revents; |
3580 | + int fd; |
3581 | + uint32_t created_id; |
3582 | + uint32_t created_id_next; |
3583 | + size_t send_buffer_size; |
3584 | + size_t send_data_size; |
3585 | + size_t send_data_offset; |
3586 | + size_t recv_buffer_size; |
3587 | + size_t recv_data_size; |
3588 | + size_t recv_data_offset; |
3589 | + gearman_universal_st *gearman; |
3590 | + gearman_connection_st *next; |
3591 | + gearman_connection_st *prev; |
3592 | + const void *context; |
3593 | + struct addrinfo *addrinfo; |
3594 | + struct addrinfo *addrinfo_next; |
3595 | + uint8_t *send_buffer_ptr; |
3596 | + gearman_packet_st *recv_packet; |
3597 | + uint8_t *recv_buffer_ptr; |
3598 | + const void *protocol_context; |
3599 | + gearman_connection_protocol_context_free_fn *protocol_context_free_fn; |
3600 | + gearman_packet_pack_fn *packet_pack_fn; |
3601 | + gearman_packet_unpack_fn *packet_unpack_fn; |
3602 | + gearman_packet_st packet; |
3603 | + char host[NI_MAXHOST]; |
3604 | + uint8_t send_buffer[GEARMAN_SEND_BUFFER_SIZE]; |
3605 | + uint8_t recv_buffer[GEARMAN_RECV_BUFFER_SIZE]; |
3606 | +}; |
3607 | + |
3608 | +#ifdef GEARMAN_CORE |
3609 | + |
3610 | +/** |
3611 | + * Initialize a connection structure. Always check the return value even if |
3612 | + * passing in a pre-allocated structure. Some other initialization may have |
3613 | + * failed. |
3614 | + * |
3615 | + * @param[in] gearman Structure previously initialized with gearman_create() or |
3616 | + * gearman_clone(). |
3617 | + * @param[in] connection Caller allocated structure, or NULL to allocate one. |
3618 | + * @return On success, a pointer to the (possibly allocated) structure. On |
3619 | + * failure this will be NULL. |
3620 | + */ |
3621 | +GEARMAN_INTERNAL_API |
3622 | +gearman_connection_st *gearman_connection_create(gearman_universal_st *gearman, |
3623 | + gearman_connection_st *connection, |
3624 | + gearman_connection_options_t *options); |
3625 | + |
3626 | +/** |
3627 | + * Create a connection structure with the given host and port. |
3628 | + * |
3629 | + * @param[in] gearman Structure previously initialized with gearman_create() or |
3630 | + * gearman_clone(). |
3631 | + * @param[in] connection Caller allocated structure, or NULL to allocate one. |
3632 | + * @param[in] host Host or IP address to connect to. |
3633 | + * @param[in] port Port to connect to. |
3634 | + * @return On success, a pointer to the (possibly allocated) structure. On |
3635 | + * failure this will be NULL. |
3636 | + */ |
3637 | +GEARMAN_INTERNAL_API |
3638 | +gearman_connection_st *gearman_connection_create_args(gearman_universal_st *gearman, |
3639 | + gearman_connection_st *connection, |
3640 | + const char *host, in_port_t port); |
3641 | + |
3642 | +/** |
3643 | + * Clone a connection structure. |
3644 | + * |
3645 | + * @param[in] gearman Structure previously initialized with gearman_create() or |
3646 | + * gearman_clone(). |
3647 | + * @param[in] connection Caller allocated structure, or NULL to allocate one. |
3648 | + * @param[in] from Structure to use as a source to clone from. |
3649 | + * @return On success, a pointer to the (possibly allocated) structure. On |
3650 | + * failure this will be NULL. |
3651 | + */ |
3652 | +GEARMAN_INTERNAL_API |
3653 | +gearman_connection_st *gearman_connection_clone(gearman_universal_st *gearman, gearman_connection_st *src, |
3654 | + const gearman_connection_st *from); |
3655 | + |
3656 | +/** |
3657 | + * Free a connection structure. |
3658 | + * |
3659 | + * @param[in] connection Structure previously initialized with gearman_connection_create(), |
3660 | + * gearman_connection_create_args(), or gearman_connection_clone(). |
3661 | + */ |
3662 | +GEARMAN_INTERNAL_API |
3663 | +void gearman_connection_free(gearman_connection_st *connection); |
3664 | + |
3665 | + |
3666 | +GEARMAN_INTERNAL_API |
3667 | +gearman_return_t gearman_connection_set_option(gearman_connection_st *connection, |
3668 | + gearman_connection_options_t options, |
3669 | + bool value); |
3670 | + |
3671 | + |
3672 | +/** |
3673 | * Set host for a connection. |
3674 | */ |
3675 | -GEARMAN_API |
3676 | -void gearman_con_set_host(gearman_con_st *con, const char *host); |
3677 | - |
3678 | -/** |
3679 | - * Set port for a connection. |
3680 | - */ |
3681 | -GEARMAN_API |
3682 | -void gearman_con_set_port(gearman_con_st *con, in_port_t port); |
3683 | - |
3684 | -/** |
3685 | - * Get options for a connection. |
3686 | - */ |
3687 | -GEARMAN_API |
3688 | -gearman_con_options_t gearman_con_options(const gearman_con_st *con); |
3689 | - |
3690 | -/** |
3691 | - * Set options for a connection. |
3692 | - */ |
3693 | -GEARMAN_API |
3694 | -void gearman_con_set_options(gearman_con_st *con, |
3695 | - gearman_con_options_t options); |
3696 | - |
3697 | -/** |
3698 | - * Add options for a connection. |
3699 | - */ |
3700 | -GEARMAN_API |
3701 | -void gearman_con_add_options(gearman_con_st *con, |
3702 | - gearman_con_options_t options); |
3703 | - |
3704 | -/** |
3705 | - * Remove options for a connection. |
3706 | - */ |
3707 | -GEARMAN_API |
3708 | -void gearman_con_remove_options(gearman_con_st *con, |
3709 | - gearman_con_options_t options); |
3710 | +GEARMAN_INTERNAL_API |
3711 | +void gearman_connection_set_host(gearman_connection_st *connection, |
3712 | + const char *host, |
3713 | + in_port_t port); |
3714 | |
3715 | /** |
3716 | * Set connection to an already open file descriptor. |
3717 | */ |
3718 | -GEARMAN_API |
3719 | -gearman_return_t gearman_con_set_fd(gearman_con_st *con, int fd); |
3720 | +GEARMAN_INTERNAL_API |
3721 | +gearman_return_t gearman_connection_set_fd(gearman_connection_st *connection, int fd); |
3722 | |
3723 | /** |
3724 | * Get application context pointer. |
3725 | */ |
3726 | -GEARMAN_API |
3727 | -void *gearman_con_context(const gearman_con_st *con); |
3728 | +GEARMAN_INTERNAL_API |
3729 | +void *gearman_connection_context(const gearman_connection_st *connection); |
3730 | |
3731 | /** |
3732 | * Set application context pointer. |
3733 | */ |
3734 | -GEARMAN_API |
3735 | -void gearman_con_set_context(gearman_con_st *con, const void *context); |
3736 | +GEARMAN_INTERNAL_API |
3737 | +void gearman_connection_set_context(gearman_connection_st *connection, const void *context); |
3738 | |
3739 | /** |
3740 | * Connect to server. |
3741 | */ |
3742 | -GEARMAN_API |
3743 | -gearman_return_t gearman_con_connect(gearman_con_st *con); |
3744 | +GEARMAN_INTERNAL_API |
3745 | +gearman_return_t gearman_connection_connect(gearman_connection_st *connection); |
3746 | |
3747 | /** |
3748 | * Close a connection. |
3749 | */ |
3750 | -GEARMAN_API |
3751 | -void gearman_con_close(gearman_con_st *con); |
3752 | - |
3753 | -/** |
3754 | - * Clear address info, freeing structs if needed. |
3755 | - */ |
3756 | -GEARMAN_API |
3757 | -void gearman_con_reset_addrinfo(gearman_con_st *con); |
3758 | +GEARMAN_INTERNAL_API |
3759 | +void gearman_connection_close(gearman_connection_st *connection); |
3760 | |
3761 | /** |
3762 | * Send packet to a connection. |
3763 | */ |
3764 | -GEARMAN_API |
3765 | -gearman_return_t gearman_con_send(gearman_con_st *con, |
3766 | - const gearman_packet_st *packet, bool flush); |
3767 | +GEARMAN_INTERNAL_API |
3768 | +gearman_return_t gearman_connection_send(gearman_connection_st *connection, |
3769 | + const gearman_packet_st *packet, bool flush); |
3770 | |
3771 | /** |
3772 | * Send packet data to a connection. |
3773 | */ |
3774 | -GEARMAN_API |
3775 | -size_t gearman_con_send_data(gearman_con_st *con, const void *data, |
3776 | - size_t data_size, gearman_return_t *ret_ptr); |
3777 | +GEARMAN_INTERNAL_API |
3778 | +size_t gearman_connection_send_data(gearman_connection_st *connection, const void *data, |
3779 | + size_t data_size, gearman_return_t *ret_ptr); |
3780 | |
3781 | /** |
3782 | * Flush the send buffer. |
3783 | */ |
3784 | -GEARMAN_API |
3785 | -gearman_return_t gearman_con_flush(gearman_con_st *con); |
3786 | +GEARMAN_INTERNAL_API |
3787 | +gearman_return_t gearman_connection_flush(gearman_connection_st *connection); |
3788 | |
3789 | /** |
3790 | * Receive packet from a connection. |
3791 | */ |
3792 | -GEARMAN_API |
3793 | -gearman_packet_st *gearman_con_recv(gearman_con_st *con, |
3794 | - gearman_packet_st *packet, |
3795 | - gearman_return_t *ret_ptr, bool recv_data); |
3796 | +GEARMAN_INTERNAL_API |
3797 | +gearman_packet_st *gearman_connection_recv(gearman_connection_st *connection, |
3798 | + gearman_packet_st *packet, |
3799 | + gearman_return_t *ret_ptr, bool recv_data); |
3800 | |
3801 | /** |
3802 | * Receive packet data from a connection. |
3803 | */ |
3804 | -GEARMAN_API |
3805 | -size_t gearman_con_recv_data(gearman_con_st *con, void *data, size_t data_size, |
3806 | - gearman_return_t *ret_ptr); |
3807 | +GEARMAN_INTERNAL_API |
3808 | +size_t gearman_connection_recv_data(gearman_connection_st *connection, void *data, size_t data_size, |
3809 | + gearman_return_t *ret_ptr); |
3810 | |
3811 | /** |
3812 | * Read data from a connection. |
3813 | */ |
3814 | -GEARMAN_API |
3815 | -size_t gearman_con_read(gearman_con_st *con, void *data, size_t data_size, |
3816 | - gearman_return_t *ret_ptr); |
3817 | +GEARMAN_INTERNAL_API |
3818 | +size_t gearman_connection_read(gearman_connection_st *connection, void *data, size_t data_size, |
3819 | + gearman_return_t *ret_ptr); |
3820 | |
3821 | /** |
3822 | * Set events to be watched for a connection. |
3823 | */ |
3824 | -GEARMAN_API |
3825 | -gearman_return_t gearman_con_set_events(gearman_con_st *con, short events); |
3826 | +GEARMAN_INTERNAL_API |
3827 | +gearman_return_t gearman_connection_set_events(gearman_connection_st *connection, short events); |
3828 | |
3829 | /** |
3830 | * Set events that are ready for a connection. This is used with the external |
3831 | * event callbacks. |
3832 | */ |
3833 | -GEARMAN_API |
3834 | -gearman_return_t gearman_con_set_revents(gearman_con_st *con, short revents); |
3835 | +GEARMAN_INTERNAL_API |
3836 | +gearman_return_t gearman_connection_set_revents(gearman_connection_st *connection, short revents); |
3837 | |
3838 | /** |
3839 | * Get protocol context pointer. |
3840 | */ |
3841 | -GEARMAN_API |
3842 | -void *gearman_con_protocol_context(const gearman_con_st *con); |
3843 | +GEARMAN_INTERNAL_API |
3844 | +void *gearman_connection_protocol_context(const gearman_connection_st *connection); |
3845 | |
3846 | /** |
3847 | * Set protocol context pointer. |
3848 | */ |
3849 | -GEARMAN_API |
3850 | -void gearman_con_set_protocol_context(gearman_con_st *con, const void *context); |
3851 | +GEARMAN_INTERNAL_API |
3852 | +void gearman_connection_set_protocol_context(gearman_connection_st *connection, const void *context); |
3853 | |
3854 | /** |
3855 | * Set function to call when protocol_data should be freed. |
3856 | */ |
3857 | -GEARMAN_API |
3858 | -void gearman_con_set_protocol_context_free_fn(gearman_con_st *con, |
3859 | - gearman_con_protocol_context_free_fn *function); |
3860 | +GEARMAN_INTERNAL_API |
3861 | +void gearman_connection_set_protocol_context_free_fn(gearman_connection_st *connection, |
3862 | + gearman_connection_protocol_context_free_fn *function); |
3863 | |
3864 | /** |
3865 | * Set custom packet_pack function |
3866 | */ |
3867 | -GEARMAN_API |
3868 | -void gearman_con_set_packet_pack_fn(gearman_con_st *con, |
3869 | - gearman_packet_pack_fn *function); |
3870 | +GEARMAN_INTERNAL_API |
3871 | +void gearman_connection_set_packet_pack_fn(gearman_connection_st *connection, |
3872 | + gearman_packet_pack_fn *function); |
3873 | |
3874 | /** |
3875 | * Set custom packet_unpack function |
3876 | */ |
3877 | -GEARMAN_API |
3878 | -void gearman_con_set_packet_unpack_fn(gearman_con_st *con, |
3879 | - gearman_packet_unpack_fn *function); |
3880 | +GEARMAN_INTERNAL_API |
3881 | +void gearman_connection_set_packet_unpack_fn(gearman_connection_st *connection, |
3882 | + gearman_packet_unpack_fn *function); |
3883 | |
3884 | /** @} */ |
3885 | |
3886 | +#endif /* GEARMAN_CORE */ |
3887 | + |
3888 | #ifdef __cplusplus |
3889 | } |
3890 | #endif |
3891 | |
3892 | -#endif /* __GEARMAN_CON_H__ */ |
3893 | +#endif /* __GEARMAN_CONNECTION_H__ */ |
3894 | |
3895 | === modified file 'libgearman/constants.h' |
3896 | --- libgearman/constants.h 2009-10-29 20:18:00 +0000 |
3897 | +++ libgearman/constants.h 2009-12-30 19:24:13 +0000 |
3898 | @@ -20,7 +20,7 @@ |
3899 | |
3900 | /** |
3901 | * @addtogroup gearman_constants Constants |
3902 | - * @ingroup gearman |
3903 | + * @ingroup gearman_universal |
3904 | * @ingroup gearman_client |
3905 | * @ingroup gearman_worker |
3906 | * @{ |
3907 | @@ -115,81 +115,34 @@ |
3908 | /** @} */ |
3909 | |
3910 | /** |
3911 | - * @ingroup gearman |
3912 | - * Options for gearman_st. |
3913 | + * @ingroup gearman_universal |
3914 | + * Options for gearman_universal_st. |
3915 | */ |
3916 | typedef enum |
3917 | { |
3918 | - GEARMAN_ALLOCATED= (1 << 0), |
3919 | - GEARMAN_NON_BLOCKING= (1 << 1), |
3920 | - GEARMAN_DONT_TRACK_PACKETS= (1 << 2) |
3921 | + GEARMAN_NON_BLOCKING, |
3922 | + GEARMAN_DONT_TRACK_PACKETS, |
3923 | + GEARMAN_MAX |
3924 | } gearman_options_t; |
3925 | |
3926 | /** |
3927 | * @ingroup gearman_con |
3928 | - * Options for gearman_con_st. |
3929 | - */ |
3930 | -typedef enum |
3931 | -{ |
3932 | - GEARMAN_CON_ALLOCATED= (1 << 0), |
3933 | - GEARMAN_CON_READY= (1 << 1), |
3934 | - GEARMAN_CON_PACKET_IN_USE= (1 << 2), |
3935 | - GEARMAN_CON_EXTERNAL_FD= (1 << 3), |
3936 | - GEARMAN_CON_IGNORE_LOST_CONNECTION= (1 << 4), |
3937 | - GEARMAN_CON_CLOSE_AFTER_FLUSH= (1 << 5) |
3938 | -} gearman_con_options_t; |
3939 | - |
3940 | -/** |
3941 | - * @ingroup gearman_con |
3942 | - * States for gearman_con_st. |
3943 | - */ |
3944 | -typedef enum |
3945 | -{ |
3946 | - GEARMAN_CON_STATE_ADDRINFO, |
3947 | - GEARMAN_CON_STATE_CONNECT, |
3948 | - GEARMAN_CON_STATE_CONNECTING, |
3949 | - GEARMAN_CON_STATE_CONNECTED |
3950 | -} gearman_con_state_t; |
3951 | - |
3952 | -/** |
3953 | - * @ingroup gearman_con |
3954 | - * Send states for gearman_con_st. |
3955 | - */ |
3956 | -typedef enum |
3957 | -{ |
3958 | - GEARMAN_CON_SEND_STATE_NONE, |
3959 | - GEARMAN_CON_SEND_STATE_PRE_FLUSH, |
3960 | - GEARMAN_CON_SEND_STATE_FORCE_FLUSH, |
3961 | - GEARMAN_CON_SEND_STATE_FLUSH, |
3962 | - GEARMAN_CON_SEND_STATE_FLUSH_DATA |
3963 | -} gearman_con_send_state_t; |
3964 | - |
3965 | -/** |
3966 | - * @ingroup gearman_con |
3967 | - * Recv states for gearman_con_st. |
3968 | - */ |
3969 | -typedef enum |
3970 | -{ |
3971 | - GEARMAN_CON_RECV_STATE_NONE, |
3972 | - GEARMAN_CON_RECV_STATE_READ, |
3973 | - GEARMAN_CON_RECV_STATE_READ_DATA |
3974 | -} gearman_con_recv_state_t; |
3975 | - |
3976 | -/** |
3977 | - * @ingroup gearman_packet |
3978 | - * Options for gearman_packet_st. |
3979 | - */ |
3980 | -typedef enum |
3981 | -{ |
3982 | - GEARMAN_PACKET_ALLOCATED= (1 << 0), |
3983 | - GEARMAN_PACKET_COMPLETE= (1 << 1), |
3984 | - GEARMAN_PACKET_FREE_DATA= (1 << 2) |
3985 | -} gearman_packet_options_t; |
3986 | + * Options for gearman_connection_st. |
3987 | + */ |
3988 | +typedef enum |
3989 | +{ |
3990 | + GEARMAN_CON_READY, |
3991 | + GEARMAN_CON_PACKET_IN_USE, |
3992 | + GEARMAN_CON_EXTERNAL_FD, |
3993 | + GEARMAN_CON_IGNORE_LOST_CONNECTION, |
3994 | + GEARMAN_CON_CLOSE_AFTER_FLUSH, |
3995 | + GEARMAN_CON_MAX |
3996 | +} gearman_connection_options_t; |
3997 | |
3998 | /** |
3999 | * @ingroup gearman_packet |
4000 | * Magic types. |
4001 | - */ |
4002 | +*/ |
4003 | typedef enum |
4004 | { |
4005 | GEARMAN_MAGIC_TEXT, |
4006 | @@ -245,48 +198,6 @@ |
4007 | } gearman_command_t; |
4008 | |
4009 | /** |
4010 | - * @ingroup gearman_task |
4011 | - * Options for gearman_task_st. |
4012 | - */ |
4013 | -typedef enum |
4014 | -{ |
4015 | - GEARMAN_TASK_ALLOCATED= (1 << 0), |
4016 | - GEARMAN_TASK_SEND_IN_USE= (1 << 1) |
4017 | -} gearman_task_options_t; |
4018 | - |
4019 | -/** |
4020 | - * @ingroup gearman_task |
4021 | - * States for gearman_task_st. |
4022 | - */ |
4023 | -typedef enum |
4024 | -{ |
4025 | - GEARMAN_TASK_STATE_NEW, |
4026 | - GEARMAN_TASK_STATE_SUBMIT, |
4027 | - GEARMAN_TASK_STATE_WORKLOAD, |
4028 | - GEARMAN_TASK_STATE_WORK, |
4029 | - GEARMAN_TASK_STATE_CREATED, |
4030 | - GEARMAN_TASK_STATE_DATA, |
4031 | - GEARMAN_TASK_STATE_WARNING, |
4032 | - GEARMAN_TASK_STATE_STATUS, |
4033 | - GEARMAN_TASK_STATE_COMPLETE, |
4034 | - GEARMAN_TASK_STATE_EXCEPTION, |
4035 | - GEARMAN_TASK_STATE_FAIL, |
4036 | - GEARMAN_TASK_STATE_FINISHED |
4037 | -} gearman_task_state_t; |
4038 | - |
4039 | -/** |
4040 | - * @ingroup gearman_job |
4041 | - * Options for gearman_job_st. |
4042 | - */ |
4043 | -typedef enum |
4044 | -{ |
4045 | - GEARMAN_JOB_ALLOCATED= (1 << 0), |
4046 | - GEARMAN_JOB_ASSIGNED_IN_USE= (1 << 1), |
4047 | - GEARMAN_JOB_WORK_IN_USE= (1 << 2), |
4048 | - GEARMAN_JOB_FINISHED= (1 << 3) |
4049 | -} gearman_job_options_t; |
4050 | - |
4051 | -/** |
4052 | * @ingroup gearman_job |
4053 | * Priority levels for a job. |
4054 | */ |
4055 | @@ -309,22 +220,11 @@ |
4056 | GEARMAN_CLIENT_TASK_IN_USE= (1 << 2), |
4057 | GEARMAN_CLIENT_UNBUFFERED_RESULT= (1 << 3), |
4058 | GEARMAN_CLIENT_NO_NEW= (1 << 4), |
4059 | - GEARMAN_CLIENT_FREE_TASKS= (1 << 5) |
4060 | + GEARMAN_CLIENT_FREE_TASKS= (1 << 5), |
4061 | + GEARMAN_CLIENT_MAX= (1 << 6) |
4062 | } gearman_client_options_t; |
4063 | |
4064 | /** |
4065 | - * @ingroup gearman_client |
4066 | - * States for gearman_client_st. |
4067 | - */ |
4068 | -typedef enum |
4069 | -{ |
4070 | - GEARMAN_CLIENT_STATE_IDLE, |
4071 | - GEARMAN_CLIENT_STATE_NEW, |
4072 | - GEARMAN_CLIENT_STATE_SUBMIT, |
4073 | - GEARMAN_CLIENT_STATE_PACKET |
4074 | -} gearman_client_state_t; |
4075 | - |
4076 | -/** |
4077 | * @ingroup gearman_worker |
4078 | * Options for gearman_worker_st. |
4079 | */ |
4080 | @@ -338,57 +238,21 @@ |
4081 | GEARMAN_WORKER_WORK_JOB_IN_USE= (1 << 5), |
4082 | GEARMAN_WORKER_CHANGE= (1 << 6), |
4083 | GEARMAN_WORKER_GRAB_UNIQ= (1 << 7), |
4084 | - GEARMAN_WORKER_TIMEOUT_RETURN= (1 << 8) |
4085 | + GEARMAN_WORKER_TIMEOUT_RETURN= (1 << 8), |
4086 | + GEARMAN_WORKER_MAX= (1 << 9) |
4087 | } gearman_worker_options_t; |
4088 | |
4089 | /** |
4090 | - * @ingroup gearman_worker |
4091 | - * States for gearman_worker_st. |
4092 | - */ |
4093 | -typedef enum |
4094 | -{ |
4095 | - GEARMAN_WORKER_STATE_START, |
4096 | - GEARMAN_WORKER_STATE_FUNCTION_SEND, |
4097 | - GEARMAN_WORKER_STATE_CONNECT, |
4098 | - GEARMAN_WORKER_STATE_GRAB_JOB_SEND, |
4099 | - GEARMAN_WORKER_STATE_GRAB_JOB_RECV, |
4100 | - GEARMAN_WORKER_STATE_PRE_SLEEP |
4101 | -} gearman_worker_state_t; |
4102 | - |
4103 | -/** |
4104 | - * @ingroup gearman_worker |
4105 | - * Options for gearman_worker_function_st. |
4106 | - */ |
4107 | -typedef enum |
4108 | -{ |
4109 | - GEARMAN_WORKER_FUNCTION_PACKET_IN_USE= (1 << 0), |
4110 | - GEARMAN_WORKER_FUNCTION_CHANGE= (1 << 1), |
4111 | - GEARMAN_WORKER_FUNCTION_REMOVE= (1 << 2) |
4112 | -} gearman_worker_function_options_t; |
4113 | - |
4114 | -/** |
4115 | - * @ingroup gearman_worker |
4116 | - * Work states for gearman_worker_st. |
4117 | - */ |
4118 | -typedef enum |
4119 | -{ |
4120 | - GEARMAN_WORKER_WORK_STATE_GRAB_JOB, |
4121 | - GEARMAN_WORKER_WORK_STATE_FUNCTION, |
4122 | - GEARMAN_WORKER_WORK_STATE_COMPLETE, |
4123 | - GEARMAN_WORKER_WORK_STATE_FAIL |
4124 | -} gearman_worker_work_state_t; |
4125 | - |
4126 | -/** |
4127 | * @addtogroup gearman_types Types |
4128 | - * @ingroup gearman |
4129 | + * @ingroup gearman_universal |
4130 | * @ingroup gearman_client |
4131 | * @ingroup gearman_worker |
4132 | * @{ |
4133 | */ |
4134 | |
4135 | /* Types. */ |
4136 | -typedef struct gearman_st gearman_st; |
4137 | -typedef struct gearman_con_st gearman_con_st; |
4138 | +typedef struct gearman_universal_st gearman_universal_st; |
4139 | +typedef struct gearman_connection_st gearman_connection_st; |
4140 | typedef struct gearman_packet_st gearman_packet_st; |
4141 | typedef struct gearman_command_info_st gearman_command_info_st; |
4142 | typedef struct gearman_task_st gearman_task_st; |
4143 | @@ -402,7 +266,7 @@ |
4144 | typedef gearman_return_t (gearman_created_fn)(gearman_task_st *task); |
4145 | typedef gearman_return_t (gearman_data_fn)(gearman_task_st *task); |
4146 | typedef gearman_return_t (gearman_warning_fn)(gearman_task_st *task); |
4147 | -typedef gearman_return_t (gearman_status_fn)(gearman_task_st *task); |
4148 | +typedef gearman_return_t (gearman_universal_status_fn)(gearman_task_st *task); |
4149 | typedef gearman_return_t (gearman_complete_fn)(gearman_task_st *task); |
4150 | typedef gearman_return_t (gearman_exception_fn)(gearman_task_st *task); |
4151 | typedef gearman_return_t (gearman_fail_fn)(gearman_task_st *task); |
4152 | @@ -415,7 +279,10 @@ |
4153 | size_t *result_size, |
4154 | gearman_return_t *ret_ptr); |
4155 | |
4156 | -typedef gearman_return_t (gearman_event_watch_fn)(gearman_con_st *con, |
4157 | +/** |
4158 | + @todo this is only used by the server and should be made private. |
4159 | + */ |
4160 | +typedef gearman_return_t (gearman_event_watch_fn)(gearman_connection_st *con, |
4161 | short events, void *context); |
4162 | |
4163 | typedef void* (gearman_malloc_fn)(size_t size, void *context); |
4164 | @@ -427,15 +294,15 @@ |
4165 | typedef void (gearman_log_fn)(const char *line, gearman_verbose_t verbose, |
4166 | void *context); |
4167 | |
4168 | -typedef void (gearman_con_protocol_context_free_fn)(gearman_con_st *con, |
4169 | - void *context); |
4170 | +typedef void (gearman_connection_protocol_context_free_fn)(gearman_connection_st *con, |
4171 | + void *context); |
4172 | |
4173 | typedef size_t (gearman_packet_pack_fn)(const gearman_packet_st *packet, |
4174 | - gearman_con_st *con, |
4175 | + gearman_connection_st *con, |
4176 | void *data, size_t data_size, |
4177 | gearman_return_t *ret_ptr); |
4178 | typedef size_t (gearman_packet_unpack_fn)(gearman_packet_st *packet, |
4179 | - gearman_con_st *con, const void *data, |
4180 | + gearman_connection_st *con, const void *data, |
4181 | size_t data_size, |
4182 | gearman_return_t *ret_ptr); |
4183 | |
4184 | |
4185 | === added file 'libgearman/core.c' |
4186 | --- libgearman/core.c 1970-01-01 00:00:00 +0000 |
4187 | +++ libgearman/core.c 2009-12-30 19:24:13 +0000 |
4188 | @@ -0,0 +1,73 @@ |
4189 | +/* Gearman server and library |
4190 | + * Copyright (C) 2008 Brian Aker, Eric Day |
4191 | + * All rights reserved. |
4192 | + * |
4193 | + * Use and distribution licensed under the BSD license. See |
4194 | + * the COPYING file in the parent directory for full text. |
4195 | + */ |
4196 | + |
4197 | +/** |
4198 | + * @file |
4199 | + * @brief Gearman State Definitions |
4200 | + */ |
4201 | + |
4202 | +#include "common.h" |
4203 | + |
4204 | + |
4205 | +gearman_return_t gearman_parse_servers(const char *servers, |
4206 | + gearman_parse_server_fn *function, |
4207 | + const void *context) |
4208 | +{ |
4209 | + const char *ptr= servers; |
4210 | + size_t x; |
4211 | + char host[NI_MAXHOST]; |
4212 | + char port[NI_MAXSERV]; |
4213 | + gearman_return_t ret; |
4214 | + |
4215 | + if (ptr == NULL) |
4216 | + return (*function)(NULL, 0, (void *)context); |
4217 | + |
4218 | + while (1) |
4219 | + { |
4220 | + x= 0; |
4221 | + |
4222 | + while (*ptr != 0 && *ptr != ',' && *ptr != ':') |
4223 | + { |
4224 | + if (x < (NI_MAXHOST - 1)) |
4225 | + host[x++]= *ptr; |
4226 | + |
4227 | + ptr++; |
4228 | + } |
4229 | + |
4230 | + host[x]= 0; |
4231 | + |
4232 | + if (*ptr == ':') |
4233 | + { |
4234 | + ptr++; |
4235 | + x= 0; |
4236 | + |
4237 | + while (*ptr != 0 && *ptr != ',') |
4238 | + { |
4239 | + if (x < (NI_MAXSERV - 1)) |
4240 | + port[x++]= *ptr; |
4241 | + |
4242 | + ptr++; |
4243 | + } |
4244 | + |
4245 | + port[x]= 0; |
4246 | + } |
4247 | + else |
4248 | + port[0]= 0; |
4249 | + |
4250 | + ret= (*function)(host, (in_port_t)atoi(port), (void *)context); |
4251 | + if (ret != GEARMAN_SUCCESS) |
4252 | + return ret; |
4253 | + |
4254 | + if (*ptr == 0) |
4255 | + break; |
4256 | + |
4257 | + ptr++; |
4258 | + } |
4259 | + |
4260 | + return GEARMAN_SUCCESS; |
4261 | +} |
4262 | |
4263 | === added file 'libgearman/core.h' |
4264 | --- libgearman/core.h 1970-01-01 00:00:00 +0000 |
4265 | +++ libgearman/core.h 2009-12-30 19:24:13 +0000 |
4266 | @@ -0,0 +1,49 @@ |
4267 | +/* Gearman server and library |
4268 | + * Copyright (C) 2008 Brian Aker, Eric Day |
4269 | + * All rights reserved. |
4270 | + * |
4271 | + * Use and distribution licensed under the BSD license. See |
4272 | + * the COPYING file in the parent directory for full text. |
4273 | + */ |
4274 | + |
4275 | +/** |
4276 | + * @file |
4277 | + * @brief Gearman Declarations |
4278 | + */ |
4279 | + |
4280 | +#ifndef __GEARMAN_CORE_H__ |
4281 | +#define __GEARMAN_CORE_H__ |
4282 | + |
4283 | +#include <libgearman/universal.h> |
4284 | +#include <libgearman/command.h> |
4285 | +#include <libgearman/packet.h> |
4286 | +#include <libgearman/connection.h> |
4287 | +#include <libgearman/log.h> |
4288 | + |
4289 | +#ifdef __cplusplus |
4290 | +extern "C" { |
4291 | +#endif |
4292 | + |
4293 | +/** |
4294 | + * @ingroup gearman_universal |
4295 | + */ |
4296 | +/** |
4297 | + * Utility function used for parsing server lists. |
4298 | + * |
4299 | + * @param[in] servers String containing a list of servers to parse. |
4300 | + * @param[in] callback Function to call for each server that is found. |
4301 | + * @param[in] context Argument to pass along with callback function. |
4302 | + * @return Standard Gearman return value. |
4303 | + */ |
4304 | +GEARMAN_API |
4305 | +gearman_return_t gearman_parse_servers(const char *servers, |
4306 | + gearman_parse_server_fn *callback, |
4307 | + const void *context); |
4308 | + |
4309 | +/** @} */ |
4310 | + |
4311 | +#ifdef __cplusplus |
4312 | +} |
4313 | +#endif |
4314 | + |
4315 | +#endif /* __GEARMAN_CORE_H__ */ |
4316 | |
4317 | === added file 'libgearman/gearman.c' |
4318 | --- libgearman/gearman.c 1970-01-01 00:00:00 +0000 |
4319 | +++ libgearman/gearman.c 2009-12-30 19:24:13 +0000 |
4320 | @@ -0,0 +1,57 @@ |
4321 | +/* Gearman server and library |
4322 | + * Copyright (C) 2008 Brian Aker, Eric Day |
4323 | + * All rights reserved. |
4324 | + * |
4325 | + * Use and distribution licensed under the BSD license. See |
4326 | + * the COPYING file in the parent directory for full text. |
4327 | + */ |
4328 | + |
4329 | +/** |
4330 | + * @file |
4331 | + * @brief Gearman State Definitions |
4332 | + */ |
4333 | + |
4334 | +#include "common.h" |
4335 | + |
4336 | +/** |
4337 | + * @addtogroup gearman_universal_static Static Gearman Declarations |
4338 | + * @ingroup gearman_universal |
4339 | + * @{ |
4340 | + */ |
4341 | + |
4342 | +/** |
4343 | + * Names of the verbose levels provided. |
4344 | + */ |
4345 | +static const char *_verbose_name[GEARMAN_VERBOSE_MAX]= |
4346 | +{ |
4347 | + "NEVER", |
4348 | + "FATAL", |
4349 | + "ERROR", |
4350 | + "INFO", |
4351 | + "DEBUG", |
4352 | + "CRAZY" |
4353 | +}; |
4354 | + |
4355 | +/** @} */ |
4356 | + |
4357 | +/* |
4358 | + * Public Definitions |
4359 | + */ |
4360 | + |
4361 | +const char *gearman_version(void) |
4362 | +{ |
4363 | + return PACKAGE_VERSION; |
4364 | +} |
4365 | + |
4366 | +const char *gearman_bugreport(void) |
4367 | +{ |
4368 | + return PACKAGE_BUGREPORT; |
4369 | +} |
4370 | + |
4371 | +const char *gearman_verbose_name(gearman_verbose_t verbose) |
4372 | +{ |
4373 | + if (verbose >= GEARMAN_VERBOSE_MAX) |
4374 | + return "UNKNOWN"; |
4375 | + |
4376 | + return _verbose_name[verbose]; |
4377 | +} |
4378 | |
4379 | === added file 'libgearman/gearman.h' |
4380 | --- libgearman/gearman.h 1970-01-01 00:00:00 +0000 |
4381 | +++ libgearman/gearman.h 2009-12-30 19:24:13 +0000 |
4382 | @@ -0,0 +1,112 @@ |
4383 | +/* Gearman server and library |
4384 | + * Copyright (C) 2008 Brian Aker, Eric Day |
4385 | + * All rights reserved. |
4386 | + * |
4387 | + * Use and distribution licensed under the BSD license. See |
4388 | + * the COPYING file in the parent directory for full text. |
4389 | + */ |
4390 | + |
4391 | +/** |
4392 | + * @file |
4393 | + * @brief Gearman Declarations |
4394 | + */ |
4395 | + |
4396 | +#ifndef __GEARMAN_H__ |
4397 | +#define __GEARMAN_H__ |
4398 | + |
4399 | +#include <inttypes.h> |
4400 | +#ifndef __cplusplus |
4401 | +# include <stdbool.h> |
4402 | +#endif |
4403 | +#include <sys/types.h> |
4404 | +#include <netinet/in.h> |
4405 | +#include <sys/socket.h> |
4406 | +#include <netdb.h> |
4407 | +#include <arpa/inet.h> |
4408 | +#include <poll.h> |
4409 | +#include <sys/uio.h> |
4410 | +#include <stdarg.h> |
4411 | +#include <stdlib.h> |
4412 | + |
4413 | +#include <libgearman/visibility.h> |
4414 | +#include <libgearman/constants.h> |
4415 | + |
4416 | +// Everything above this line must be in the order specified. |
4417 | +#include <libgearman/core.h> |
4418 | +#include <libgearman/task.h> |
4419 | +#include <libgearman/job.h> |
4420 | + |
4421 | +#include <libgearman/worker.h> |
4422 | +#include <libgearman/client.h> |
4423 | + |
4424 | +#ifdef __cplusplus |
4425 | +extern "C" { |
4426 | +#endif |
4427 | + |
4428 | +/** |
4429 | + * @addtogroup gearman Gearman Declarations |
4430 | + * |
4431 | + * This is a low level interface for gearman library instances. This is used |
4432 | + * internally by both client and worker interfaces, so you probably want to |
4433 | + * look there first. This is usually used to write lower level clients, workers, |
4434 | + * proxies, or your own server. |
4435 | + * |
4436 | + * There is no locking within a single gearman_universal_st structure, so for threaded |
4437 | + * applications you must either ensure isolation in the application or use |
4438 | + * multiple gearman_universal_st structures (for example, one for each thread). |
4439 | + * |
4440 | + * @{ |
4441 | + */ |
4442 | + |
4443 | +/** |
4444 | + * Get Gearman library version. |
4445 | + * |
4446 | + * @return Version string of library. |
4447 | + */ |
4448 | +GEARMAN_API |
4449 | +const char *gearman_version(void); |
4450 | + |
4451 | +/** |
4452 | + * Get bug report URL. |
4453 | + * |
4454 | + * @return Bug report URL string. |
4455 | + */ |
4456 | +GEARMAN_API |
4457 | +const char *gearman_bugreport(void); |
4458 | + |
4459 | +/** |
4460 | + * Get string with the name of the given verbose level. |
4461 | + * |
4462 | + * @param[in] verbose Verbose logging level. |
4463 | + * @return String form of verbose level. |
4464 | + */ |
4465 | +GEARMAN_API |
4466 | +const char *gearman_verbose_name(gearman_verbose_t verbose); |
4467 | + |
4468 | +/** |
4469 | + * Get current socket I/O activity timeout value. |
4470 | + * |
4471 | + * @param[in] gearman_client_st or gearman_worker_st Structure previously initialized. |
4472 | + * @return Timeout in milliseconds to wait for I/O activity. A negative value |
4473 | + * means an infinite timeout. |
4474 | + * @note This is a utility macro. |
4475 | + */ |
4476 | +#define gearman_timeout(__object) ((__object)->gearman.timeout) |
4477 | + |
4478 | +/** |
4479 | + * Set socket I/O activity timeout for connections in a Gearman structure. |
4480 | + * |
4481 | + * @param[in] gearman_client_st or gearman_worker_st Structure previously initialized. |
4482 | + * @param[in] timeout Milliseconds to wait for I/O activity. A negative value |
4483 | + * means an infinite timeout. |
4484 | + * @note This is a utility macro. |
4485 | + */ |
4486 | +#define gearman_set_timeout(__object, __value) ((__object)->gearman.timeout)=(__value); |
4487 | + |
4488 | +/** @} */ |
4489 | + |
4490 | +#ifdef __cplusplus |
4491 | +} |
4492 | +#endif |
4493 | + |
4494 | +#endif /* __GEARMAN_H__ */ |
4495 | |
4496 | === modified file 'libgearman/include.am' |
4497 | --- libgearman/include.am 2009-12-18 19:25:00 +0000 |
4498 | +++ libgearman/include.am 2009-12-30 19:24:13 +0000 |
4499 | @@ -10,32 +10,53 @@ |
4500 | # Included from Top Level Makefile.am |
4501 | # All paths should be given relative to the root |
4502 | |
4503 | +nobase_include_HEADERS += \ |
4504 | + libgearman/client.h \ |
4505 | + libgearman/command.h \ |
4506 | + libgearman/connection.h \ |
4507 | + libgearman/constants.h \ |
4508 | + libgearman/core.h \ |
4509 | + libgearman/gearman.h \ |
4510 | + libgearman/job.h \ |
4511 | + libgearman/packet.h \ |
4512 | + libgearman/task.h \ |
4513 | + libgearman/universal.h \ |
4514 | + libgearman/visibility.h \ |
4515 | + libgearman/worker.h |
4516 | + |
4517 | +noinst_HEADERS+= \ |
4518 | + libgearman/common.h \ |
4519 | + libgearman/log.h |
4520 | + |
4521 | +noinst_LTLIBRARIES+= libgearman/libgearmancore.la |
4522 | +libgearman_libgearmancore_la_SOURCES= \ |
4523 | + libgearman/connection.c \ |
4524 | + libgearman/core.c \ |
4525 | + libgearman/log.c \ |
4526 | + libgearman/packet.c \ |
4527 | + libgearman/universal.c |
4528 | + |
4529 | +libgearman_libgearmancore_la_CFLAGS= \ |
4530 | + ${AM_CFLAGS} \ |
4531 | + -DBUILDING_LIBGEARMAN |
4532 | + |
4533 | +#libgearman_libgearmancore_la_LDFLAGS= \ |
4534 | +# $(AM_LDFLAGS) \ |
4535 | +# -version-info \ |
4536 | +# $(GEARMAN_LIBRARY_VERSION) |
4537 | +# |
4538 | +#libgearman_libgearmancore_la_LIBADD= \ |
4539 | +# $(LTLIBUUID) |
4540 | + |
4541 | lib_LTLIBRARIES+= libgearman/libgearman.la |
4542 | - |
4543 | -nobase_pkginclude_HEADERS += \ |
4544 | - libgearman/client.h \ |
4545 | - libgearman/conn.h \ |
4546 | - libgearman/constants.h \ |
4547 | - libgearman/gearman.h \ |
4548 | - libgearman/job.h \ |
4549 | - libgearman/packet.h \ |
4550 | - libgearman/structs.h \ |
4551 | - libgearman/task.h \ |
4552 | - libgearman/visibility.h \ |
4553 | - libgearman/worker.h |
4554 | - |
4555 | -noinst_HEADERS+= \ |
4556 | - libgearman/common.h \ |
4557 | - libgearman/gearman_local.h |
4558 | - |
4559 | libgearman_libgearman_la_SOURCES= \ |
4560 | - libgearman/client.c \ |
4561 | - libgearman/conn.c \ |
4562 | - libgearman/gearman.c \ |
4563 | - libgearman/job.c \ |
4564 | - libgearman/packet.c \ |
4565 | - libgearman/task.c \ |
4566 | - libgearman/worker.c |
4567 | + libgearman/client.c \ |
4568 | + libgearman/gearman.c \ |
4569 | + libgearman/job.c \ |
4570 | + libgearman/task.c \ |
4571 | + libgearman/worker.c |
4572 | + |
4573 | +libgearman_libgearman_la_DEPENDENCIES= libgearman/libgearmancore.la |
4574 | |
4575 | libgearman_libgearman_la_CFLAGS= \ |
4576 | ${AM_CFLAGS} \ |
4577 | @@ -47,5 +68,6 @@ |
4578 | $(GEARMAN_LIBRARY_VERSION) |
4579 | |
4580 | libgearman_libgearman_la_LIBADD= \ |
4581 | + libgearman/libgearmancore.la \ |
4582 | $(LTLIBUUID) |
4583 | |
4584 | |
4585 | === modified file 'libgearman/job.c' |
4586 | --- libgearman/job.c 2009-11-09 10:05:31 +0000 |
4587 | +++ libgearman/job.c 2009-12-30 19:24:13 +0000 |
4588 | @@ -30,6 +30,44 @@ |
4589 | * Public Definitions |
4590 | */ |
4591 | |
4592 | +gearman_job_st *gearman_job_create(gearman_worker_st *worker, |
4593 | + gearman_job_st *job) |
4594 | +{ |
4595 | + if (job == NULL) |
4596 | + { |
4597 | + job= malloc(sizeof(gearman_job_st)); |
4598 | + if (job == NULL) |
4599 | + { |
4600 | + gearman_universal_set_error(worker->gearman, "_job_create", "malloc"); |
4601 | + return NULL; |
4602 | + } |
4603 | + |
4604 | + job->options.allocated= true; |
4605 | + } |
4606 | + else |
4607 | + { |
4608 | + job->options.allocated= false; |
4609 | + } |
4610 | + |
4611 | + job->options.assigned_in_use= false; |
4612 | + job->options.work_in_use= false; |
4613 | + job->options.finished= false; |
4614 | + |
4615 | + job->worker= worker; |
4616 | + |
4617 | + if (worker->job_list != NULL) |
4618 | + worker->job_list->prev= job; |
4619 | + job->next= worker->job_list; |
4620 | + job->prev= NULL; |
4621 | + worker->job_list= job; |
4622 | + worker->job_count++; |
4623 | + |
4624 | + job->con= NULL; |
4625 | + |
4626 | + return job; |
4627 | +} |
4628 | + |
4629 | + |
4630 | gearman_return_t gearman_job_send_data(gearman_job_st *job, const void *data, |
4631 | size_t data_size) |
4632 | { |
4633 | @@ -37,20 +75,20 @@ |
4634 | const void *args[2]; |
4635 | size_t args_size[2]; |
4636 | |
4637 | - if (!(job->options & GEARMAN_JOB_WORK_IN_USE)) |
4638 | + if (! (job->options.work_in_use)) |
4639 | { |
4640 | args[0]= job->assigned.arg[0]; |
4641 | args_size[0]= job->assigned.arg_size[0]; |
4642 | args[1]= data; |
4643 | args_size[1]= data_size; |
4644 | - ret= gearman_add_packet_args(job->worker->gearman, &(job->work), |
4645 | - GEARMAN_MAGIC_REQUEST, |
4646 | - GEARMAN_COMMAND_WORK_DATA, |
4647 | - args, args_size, 2); |
4648 | + ret= gearman_packet_create_args(job->worker->gearman, &(job->work), |
4649 | + GEARMAN_MAGIC_REQUEST, |
4650 | + GEARMAN_COMMAND_WORK_DATA, |
4651 | + args, args_size, 2); |
4652 | if (ret != GEARMAN_SUCCESS) |
4653 | return ret; |
4654 | |
4655 | - job->options|= GEARMAN_JOB_WORK_IN_USE; |
4656 | + job->options.work_in_use= true; |
4657 | } |
4658 | |
4659 | return _job_send(job); |
4660 | @@ -64,20 +102,20 @@ |
4661 | const void *args[2]; |
4662 | size_t args_size[2]; |
4663 | |
4664 | - if (!(job->options & GEARMAN_JOB_WORK_IN_USE)) |
4665 | + if (! (job->options.work_in_use)) |
4666 | { |
4667 | args[0]= job->assigned.arg[0]; |
4668 | args_size[0]= job->assigned.arg_size[0]; |
4669 | args[1]= warning; |
4670 | args_size[1]= warning_size; |
4671 | - ret= gearman_add_packet_args(job->worker->gearman, &(job->work), |
4672 | - GEARMAN_MAGIC_REQUEST, |
4673 | - GEARMAN_COMMAND_WORK_WARNING, |
4674 | - args, args_size, 2); |
4675 | + ret= gearman_packet_create_args(job->worker->gearman, &(job->work), |
4676 | + GEARMAN_MAGIC_REQUEST, |
4677 | + GEARMAN_COMMAND_WORK_WARNING, |
4678 | + args, args_size, 2); |
4679 | if (ret != GEARMAN_SUCCESS) |
4680 | return ret; |
4681 | |
4682 | - job->options|= GEARMAN_JOB_WORK_IN_USE; |
4683 | + job->options.work_in_use= true; |
4684 | } |
4685 | |
4686 | return _job_send(job); |
4687 | @@ -93,7 +131,7 @@ |
4688 | const void *args[3]; |
4689 | size_t args_size[3]; |
4690 | |
4691 | - if (!(job->options & GEARMAN_JOB_WORK_IN_USE)) |
4692 | + if (! (job->options.work_in_use)) |
4693 | { |
4694 | snprintf(numerator_string, 12, "%u", numerator); |
4695 | snprintf(denominator_string, 12, "%u", denominator); |
4696 | @@ -104,14 +142,14 @@ |
4697 | args_size[1]= strlen(numerator_string) + 1; |
4698 | args[2]= denominator_string; |
4699 | args_size[2]= strlen(denominator_string); |
4700 | - ret= gearman_add_packet_args(job->worker->gearman, &(job->work), |
4701 | + ret= gearman_packet_create_args(job->worker->gearman, &(job->work), |
4702 | GEARMAN_MAGIC_REQUEST, |
4703 | GEARMAN_COMMAND_WORK_STATUS, |
4704 | args, args_size, 3); |
4705 | if (ret != GEARMAN_SUCCESS) |
4706 | return ret; |
4707 | |
4708 | - job->options|= GEARMAN_JOB_WORK_IN_USE; |
4709 | + job->options.work_in_use= true; |
4710 | } |
4711 | |
4712 | return _job_send(job); |
4713 | @@ -125,30 +163,31 @@ |
4714 | const void *args[2]; |
4715 | size_t args_size[2]; |
4716 | |
4717 | - if (job->options & GEARMAN_JOB_FINISHED) |
4718 | + if (job->options.finished) |
4719 | return GEARMAN_SUCCESS; |
4720 | |
4721 | - if (!(job->options & GEARMAN_JOB_WORK_IN_USE)) |
4722 | + if (! (job->options.work_in_use)) |
4723 | { |
4724 | args[0]= job->assigned.arg[0]; |
4725 | args_size[0]= job->assigned.arg_size[0]; |
4726 | args[1]= result; |
4727 | args_size[1]= result_size; |
4728 | - ret= gearman_add_packet_args(job->worker->gearman, &(job->work), |
4729 | + ret= gearman_packet_create_args(job->worker->gearman, &(job->work), |
4730 | GEARMAN_MAGIC_REQUEST, |
4731 | GEARMAN_COMMAND_WORK_COMPLETE, |
4732 | args, args_size, 2); |
4733 | if (ret != GEARMAN_SUCCESS) |
4734 | return ret; |
4735 | |
4736 | - job->options|= GEARMAN_JOB_WORK_IN_USE; |
4737 | + job->options.work_in_use= true; |
4738 | } |
4739 | |
4740 | ret= _job_send(job); |
4741 | if (ret != GEARMAN_SUCCESS) |
4742 | return ret; |
4743 | |
4744 | - job->options|= GEARMAN_JOB_FINISHED; |
4745 | + job->options.finished= true; |
4746 | + |
4747 | return GEARMAN_SUCCESS; |
4748 | } |
4749 | |
4750 | @@ -160,20 +199,20 @@ |
4751 | const void *args[2]; |
4752 | size_t args_size[2]; |
4753 | |
4754 | - if (!(job->options & GEARMAN_JOB_WORK_IN_USE)) |
4755 | + if (! (job->options.work_in_use)) |
4756 | { |
4757 | args[0]= job->assigned.arg[0]; |
4758 | args_size[0]= job->assigned.arg_size[0]; |
4759 | args[1]= exception; |
4760 | args_size[1]= exception_size; |
4761 | - ret= gearman_add_packet_args(job->worker->gearman, &(job->work), |
4762 | + ret= gearman_packet_create_args(job->worker->gearman, &(job->work), |
4763 | GEARMAN_MAGIC_REQUEST, |
4764 | GEARMAN_COMMAND_WORK_EXCEPTION, |
4765 | args, args_size, 2); |
4766 | if (ret != GEARMAN_SUCCESS) |
4767 | return ret; |
4768 | |
4769 | - job->options|= GEARMAN_JOB_WORK_IN_USE; |
4770 | + job->options.work_in_use= true; |
4771 | } |
4772 | |
4773 | return _job_send(job); |
4774 | @@ -185,28 +224,28 @@ |
4775 | const void *args[1]; |
4776 | size_t args_size[1]; |
4777 | |
4778 | - if (job->options & GEARMAN_JOB_FINISHED) |
4779 | + if (job->options.finished) |
4780 | return GEARMAN_SUCCESS; |
4781 | |
4782 | - if (!(job->options & GEARMAN_JOB_WORK_IN_USE)) |
4783 | + if (! (job->options.work_in_use)) |
4784 | { |
4785 | args[0]= job->assigned.arg[0]; |
4786 | args_size[0]= job->assigned.arg_size[0] - 1; |
4787 | - ret= gearman_add_packet_args(job->worker->gearman, &(job->work), |
4788 | - GEARMAN_MAGIC_REQUEST, |
4789 | - GEARMAN_COMMAND_WORK_FAIL, |
4790 | - args, args_size, 1); |
4791 | + ret= gearman_packet_create_args(job->worker->gearman, &(job->work), |
4792 | + GEARMAN_MAGIC_REQUEST, |
4793 | + GEARMAN_COMMAND_WORK_FAIL, |
4794 | + args, args_size, 1); |
4795 | if (ret != GEARMAN_SUCCESS) |
4796 | return ret; |
4797 | |
4798 | - job->options|= GEARMAN_JOB_WORK_IN_USE; |
4799 | + job->options.work_in_use= true; |
4800 | } |
4801 | |
4802 | ret= _job_send(job); |
4803 | if (ret != GEARMAN_SUCCESS) |
4804 | return ret; |
4805 | |
4806 | - job->options|= GEARMAN_JOB_FINISHED; |
4807 | + job->options.finished= true; |
4808 | return GEARMAN_SUCCESS; |
4809 | } |
4810 | |
4811 | @@ -250,12 +289,12 @@ |
4812 | { |
4813 | gearman_return_t ret; |
4814 | |
4815 | - ret= gearman_con_send(job->con, &(job->work), true); |
4816 | + ret= gearman_connection_send(job->con, &(job->work), true); |
4817 | if (ret != GEARMAN_SUCCESS) |
4818 | return ret; |
4819 | |
4820 | gearman_packet_free(&(job->work)); |
4821 | - job->options&= (gearman_job_options_t)~GEARMAN_JOB_WORK_IN_USE; |
4822 | + job->options.work_in_use= false; |
4823 | |
4824 | return GEARMAN_SUCCESS; |
4825 | } |
4826 | |
4827 | === modified file 'libgearman/job.h' |
4828 | --- libgearman/job.h 2009-10-29 00:11:45 +0000 |
4829 | +++ libgearman/job.h 2009-12-30 19:24:13 +0000 |
4830 | @@ -28,6 +28,50 @@ |
4831 | * @{ |
4832 | */ |
4833 | |
4834 | + |
4835 | +/** |
4836 | + * @ingroup gearman_job |
4837 | + */ |
4838 | +struct gearman_job_st |
4839 | +{ |
4840 | + struct { |
4841 | + bool allocated:1; |
4842 | + bool assigned_in_use:1; |
4843 | + bool work_in_use:1; |
4844 | + bool finished:1; |
4845 | + } options; |
4846 | + gearman_worker_st *worker; |
4847 | + gearman_job_st *next; |
4848 | + gearman_job_st *prev; |
4849 | + gearman_connection_st *con; |
4850 | + gearman_packet_st assigned; |
4851 | + gearman_packet_st work; |
4852 | +}; |
4853 | + |
4854 | +/** |
4855 | + * Initialize a job structure. Always check the return value even if passing |
4856 | + * in a pre-allocated structure. Some other initialization may have failed. It |
4857 | + * is not required to memset() a structure before providing it. |
4858 | + * |
4859 | + * @param[in] A valid gearman_worker_st. |
4860 | + * @param[in] gearman_job_st allocated structure, or NULL to allocate one. |
4861 | + * @return On success, a pointer to the (possibly allocated) structure. On |
4862 | + * failure this will be NULL. |
4863 | + */ |
4864 | +GEARMAN_LOCAL |
4865 | +gearman_job_st *gearman_job_create(gearman_worker_st *worker, |
4866 | + gearman_job_st *job); |
4867 | + |
4868 | +/** |
4869 | + * Free a job structure. |
4870 | + * |
4871 | + * @param[in] job Structure previously initialized with |
4872 | + * gearman_worker_grab_job(). |
4873 | + */ |
4874 | +GEARMAN_API |
4875 | +void gearman_job_free(gearman_job_st *job); |
4876 | + |
4877 | + |
4878 | /** |
4879 | * Send data for a running job. |
4880 | */ |
4881 | |
4882 | === added file 'libgearman/log.c' |
4883 | --- libgearman/log.c 1970-01-01 00:00:00 +0000 |
4884 | +++ libgearman/log.c 2009-12-30 19:24:13 +0000 |
4885 | @@ -0,0 +1,101 @@ |
4886 | +/* Gearman server and library |
4887 | + * Copyright (C) 2008-2009 Brian Aker, Eric Day |
4888 | + * All rights reserved. |
4889 | + * |
4890 | + * Use and distribution licensed under the BSD license. See |
4891 | + * the COPYING file in the parent directory for full text. |
4892 | + */ |
4893 | + |
4894 | +/** |
4895 | + * @file |
4896 | + * @brief Gearman State Definitions |
4897 | + */ |
4898 | + |
4899 | +#include "common.h" |
4900 | + |
4901 | + |
4902 | +void gearman_log(gearman_universal_st *state, gearman_verbose_t verbose, |
4903 | + const char *format, va_list args) |
4904 | +{ |
4905 | + char log_buffer[GEARMAN_MAX_ERROR_SIZE]; |
4906 | + |
4907 | + if (state->log_fn == NULL) |
4908 | + { |
4909 | + printf("%5s: ", gearman_verbose_name(verbose)); |
4910 | + vprintf(format, args); |
4911 | + printf("\n"); |
4912 | + } |
4913 | + else |
4914 | + { |
4915 | + vsnprintf(log_buffer, GEARMAN_MAX_ERROR_SIZE, format, args); |
4916 | + state->log_fn(log_buffer, verbose, (void *)state->log_context); |
4917 | + } |
4918 | +} |
4919 | + |
4920 | + |
4921 | +void gearman_log_fatal(gearman_universal_st *gearman, const char *format, |
4922 | + ...) |
4923 | +{ |
4924 | + va_list args; |
4925 | + |
4926 | + if (gearman->verbose >= GEARMAN_VERBOSE_FATAL) |
4927 | + { |
4928 | + va_start(args, format); |
4929 | + gearman_log(gearman, GEARMAN_VERBOSE_FATAL, format, args); |
4930 | + va_end(args); |
4931 | + } |
4932 | +} |
4933 | + |
4934 | +void gearman_log_error(gearman_universal_st *gearman, const char *format, |
4935 | + ...) |
4936 | +{ |
4937 | + va_list args; |
4938 | + |
4939 | + if (gearman->verbose >= GEARMAN_VERBOSE_ERROR) |
4940 | + { |
4941 | + va_start(args, format); |
4942 | + gearman_log(gearman, GEARMAN_VERBOSE_ERROR, format, args); |
4943 | + va_end(args); |
4944 | + } |
4945 | +} |
4946 | + |
4947 | +void gearman_log_info(gearman_universal_st *gearman, const char *format, |
4948 | + ...) |
4949 | +{ |
4950 | + va_list args; |
4951 | + |
4952 | + if (gearman->verbose >= GEARMAN_VERBOSE_INFO) |
4953 | + { |
4954 | + va_start(args, format); |
4955 | + gearman_log(gearman, GEARMAN_VERBOSE_INFO, format, args); |
4956 | + va_end(args); |
4957 | + } |
4958 | +} |
4959 | + |
4960 | +void gearman_log_debug(gearman_universal_st *gearman, const char *format, |
4961 | + ...) |
4962 | +{ |
4963 | + va_list args; |
4964 | + |
4965 | + if (gearman->verbose >= GEARMAN_VERBOSE_DEBUG) |
4966 | + { |
4967 | + va_start(args, format); |
4968 | + gearman_log(gearman, GEARMAN_VERBOSE_DEBUG, format, args); |
4969 | + va_end(args); |
4970 | + } |
4971 | +} |
4972 | + |
4973 | +void gearman_log_crazy(gearman_universal_st *gearman, const char *format, |
4974 | + ...) |
4975 | +{ |
4976 | + va_list args; |
4977 | + |
4978 | + if (gearman->verbose >= GEARMAN_VERBOSE_CRAZY) |
4979 | + { |
4980 | + va_start(args, format); |
4981 | + gearman_log(gearman, GEARMAN_VERBOSE_CRAZY, format, args); |
4982 | + va_end(args); |
4983 | + } |
4984 | +} |
4985 | + |
4986 | + |
4987 | |
4988 | === renamed file 'libgearman/gearman_local.h' => 'libgearman/log.h' |
4989 | --- libgearman/gearman_local.h 2009-10-29 00:11:45 +0000 |
4990 | +++ libgearman/log.h 2009-12-30 19:24:13 +0000 |
4991 | @@ -11,8 +11,8 @@ |
4992 | * @brief Local Gearman Declarations |
4993 | */ |
4994 | |
4995 | -#ifndef __GEARMAN_LOCAL_H__ |
4996 | -#define __GEARMAN_LOCAL_H__ |
4997 | +#ifndef __GEARMAN_LOG_H__ |
4998 | +#define __GEARMAN_LOG_H__ |
4999 | |
5000 | #ifdef __cplusplus |
The diff has been truncated for viewing.
Fixed the visibility issues on solaris.