Merge lp:~eday/gearmand/fixes into lp:gearmand/1.0

Proposed by Eric Day
Status: Superseded
Proposed branch: lp:~eday/gearmand/fixes
Merge into: lp:gearmand/1.0
Diff against target: 4072 lines
67 files modified
ChangeLog (+8/-0)
benchmark/blobslap_worker.c (+5/-5)
bin/gearman.c (+5/-5)
configure.ac (+3/-3)
docs/Doxyfile.api (+32/-4)
docs/Doxyfile.dev (+31/-1)
examples/reverse_worker.c (+5/-5)
examples/wc_worker.c (+3/-3)
gearmand/gearmand.c (+7/-0)
libgearman-server/client.h (+4/-2)
libgearman-server/common.h (+5/-3)
libgearman-server/conf.h (+3/-2)
libgearman-server/conf_module.h (+3/-2)
libgearman-server/conn.c (+1/-1)
libgearman-server/conn.h (+4/-2)
libgearman-server/constants.h (+31/-19)
libgearman-server/function.h (+4/-2)
libgearman-server/gearmand.c (+5/-0)
libgearman-server/gearmand.h (+13/-2)
libgearman-server/gearmand_con.c (+2/-2)
libgearman-server/gearmand_con.h (+6/-3)
libgearman-server/gearmand_thread.h (+5/-2)
libgearman-server/job.c (+24/-13)
libgearman-server/job.h (+4/-2)
libgearman-server/packet.c (+2/-2)
libgearman-server/packet.h (+4/-2)
libgearman-server/protocol_http.c (+7/-10)
libgearman-server/protocol_http.h (+6/-2)
libgearman-server/queue_libdrizzle.c (+4/-8)
libgearman-server/queue_libdrizzle.h (+2/-2)
libgearman-server/queue_libmemcached.c (+4/-8)
libgearman-server/queue_libmemcached.h (+2/-2)
libgearman-server/queue_libpq.c (+4/-8)
libgearman-server/queue_libpq.h (+2/-2)
libgearman-server/queue_libsqlite3.c (+4/-8)
libgearman-server/queue_libsqlite3.h (+2/-2)
libgearman-server/server.c (+9/-2)
libgearman-server/server.h (+13/-1)
libgearman-server/structs.h (+2/-1)
libgearman-server/thread.c (+1/-1)
libgearman-server/thread.h (+5/-2)
libgearman-server/worker.c (+28/-2)
libgearman-server/worker.h (+4/-2)
libgearman/Makefile.am (+2/-1)
libgearman/client.c (+64/-41)
libgearman/client.h (+5/-4)
libgearman/common.h (+2/-30)
libgearman/conn.c (+52/-53)
libgearman/conn.h (+5/-2)
libgearman/constants.h (+20/-13)
libgearman/gearman.c (+94/-91)
libgearman/gearman.h (+45/-33)
libgearman/gearman_local.h (+150/-0)
libgearman/job.c (+64/-36)
libgearman/job.h (+4/-2)
libgearman/packet.c (+9/-13)
libgearman/packet.h (+5/-2)
libgearman/structs.h (+1/-1)
libgearman/task.c (+2/-2)
libgearman/task.h (+4/-2)
libgearman/visibility.h (+4/-2)
libgearman/worker.c (+63/-54)
libgearman/worker.h (+3/-2)
tests/client_test.c (+7/-6)
tests/memcached_test.c (+1/-2)
tests/sqlite_test.c (+1/-2)
tests/worker_test.c (+80/-70)
To merge this branch: bzr merge lp:~eday/gearmand/fixes
Reviewer Review Type Date Requested Status
Gearman-developers Pending
Review via email: mp+14235@code.launchpad.net

This proposal has been superseded by a proposal from 2009-11-04.

To post a comment you must log in.
lp:~eday/gearmand/fixes updated
251. By Eric Day

Removed va_args packet add function, replaced with array passing.

252. By Eric Day

Merged trunk.

253. By Eric Day

Updated ChangeLog

254. By Eric Day

Small fixes for release while working with Monty on packaging.

255. By Eric Day

Fixed job handle compare for work_fail bug, added test case.

256. By Eric Day

Merged Monty's build fixes.

Unmerged revisions

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file 'ChangeLog'
2--- ChangeLog 2009-09-28 17:47:34 +0000
3+++ ChangeLog 2009-11-04 22:14:13 +0000
4@@ -1,3 +1,11 @@
5+0.11 - 2009-11-03
6+ * Added max wakeup-worker option to gearmand. Default is still to wakeup all.
7+ * API and documentation cleanup.
8+ * Fixed bug where task context free function was getting called for do()
9+ functions. This was PECL/Gearman bug #16899 as well.
10+ * Fixed bug #458912, not flushing with multiple gearmands in client.
11+ * Fixed PECL/Gearman bug #16847, was actually in C library and not in PHP.
12+
13 0.10 - 2009-09-28
14 * Added timeout option.
15 * Separated libgearman client/worker library from the server/gearmand code.
16
17=== modified file 'benchmark/blobslap_worker.c'
18--- benchmark/blobslap_worker.c 2009-06-14 07:26:30 +0000
19+++ benchmark/blobslap_worker.c 2009-11-04 22:14:13 +0000
20@@ -13,8 +13,8 @@
21
22 #include "benchmark.h"
23
24-static void *worker_fn(gearman_job_st *job, void *cb_arg, size_t *result_size,
25- gearman_return_t *ret_ptr);
26+static void *worker_fn(gearman_job_st *job, void *context,
27+ size_t *result_size, gearman_return_t *ret_ptr);
28
29 static void usage(char *name);
30
31@@ -130,10 +130,10 @@
32 return 0;
33 }
34
35-static void *worker_fn(gearman_job_st *job, void *cb_arg, size_t *result_size,
36- gearman_return_t *ret_ptr)
37+static void *worker_fn(gearman_job_st *job, void *context,
38+ size_t *result_size, gearman_return_t *ret_ptr)
39 {
40- gearman_benchmark_st *benchmark= (gearman_benchmark_st *)cb_arg;
41+ gearman_benchmark_st *benchmark= (gearman_benchmark_st *)context;
42
43 (void)result_size;
44
45
46=== modified file 'bin/gearman.c'
47--- bin/gearman.c 2009-09-28 17:47:34 +0000
48+++ bin/gearman.c 2009-11-04 22:14:13 +0000
49@@ -92,8 +92,8 @@
50 /**
51 * Callback function when worker gets a job.
52 */
53-static void *_worker_cb(gearman_job_st *job, void *cb_arg, size_t *result_size,
54- gearman_return_t *ret_ptr);
55+static void *_worker_cb(gearman_job_st *job, void *context,
56+ size_t *result_size, gearman_return_t *ret_ptr);
57
58 /**
59 * Read workload chunk from a file descriptor and put into allocated memory.
60@@ -460,10 +460,10 @@
61 gearman_worker_free(&worker);
62 }
63
64-static void *_worker_cb(gearman_job_st *job, void *cb_arg, size_t *result_size,
65- gearman_return_t *ret_ptr)
66+static void *_worker_cb(gearman_job_st *job, void *context,
67+ size_t *result_size, gearman_return_t *ret_ptr)
68 {
69- gearman_args_st *args= (gearman_args_st *)cb_arg;
70+ gearman_args_st *args= (gearman_args_st *)context;
71 int in_fds[2];
72 int out_fds[2];
73 char *result= NULL;
74
75=== modified file 'configure.ac'
76--- configure.ac 2009-09-30 06:07:17 +0000
77+++ configure.ac 2009-11-04 22:14:13 +0000
78@@ -6,7 +6,7 @@
79 # the COPYING file in this directory for full text.
80
81 AC_PREREQ(2.59)
82-AC_INIT([gearmand],[0.10],[https://launchpad.net/gearmand])
83+AC_INIT([gearmand],[0.11],[https://launchpad.net/gearmand])
84 AC_CONFIG_SRCDIR(libgearman/gearman.c)
85 AC_CONFIG_AUX_DIR(config)
86 AC_CONFIG_HEADERS([config.h])
87@@ -14,7 +14,7 @@
88
89 PANDORA_CANONICAL_TARGET(require-cxx)
90
91-GEARMAN_LIBRARY_VERSION=2:0:0
92+GEARMAN_LIBRARY_VERSION=2:1:0
93 # | | |
94 # +------+ | +---+
95 # | | |
96@@ -28,7 +28,7 @@
97 # +- increment if interfaces have been added, removed or changed
98 AC_SUBST(GEARMAN_LIBRARY_VERSION)
99
100-GEARMAN_SERVER_LIBRARY_VERSION=0:0:0
101+GEARMAN_SERVER_LIBRARY_VERSION=0:1:0
102 # | | |
103 # +------+ | +---+
104 # | | |
105
106=== modified file 'docs/Doxyfile.api'
107--- docs/Doxyfile.api 2009-09-25 00:04:06 +0000
108+++ docs/Doxyfile.api 2009-11-04 22:14:13 +0000
109@@ -534,7 +534,35 @@
110 # directories like "/usr/src/myproject". Separate the files or directories
111 # with spaces.
112
113-INPUT = docs libgearman libgearman-server examples examples/reverse_client.c examples/reverse_client_bg.c examples/reverse_client_cb.c examples/reverse_worker.c
114+INPUT = docs/doxygen.h \
115+ libgearman/constants.h \
116+ libgearman/client.h \
117+ libgearman/task.h \
118+ libgearman/worker.h \
119+ libgearman/job.h \
120+ libgearman/gearman.h \
121+ libgearman/conn.h \
122+ libgearman/packet.h \
123+ libgearman-server/constants.h \
124+ libgearman-server/client.h \
125+ libgearman-server/conf.h \
126+ libgearman-server/conf_module.h \
127+ libgearman-server/conn.h \
128+ libgearman-server/function.h \
129+ libgearman-server/job.h \
130+ libgearman-server/packet.h \
131+ libgearman-server/server.h \
132+ libgearman-server/thread.h \
133+ libgearman-server/worker.h \
134+ libgearman-server/protocol_http.h \
135+ libgearman-server/queue_libdrizzle.h \
136+ libgearman-server/queue_libmemcached.h \
137+ libgearman-server/queue_libpq.h \
138+ libgearman-server/queue_libsqlite3.h \
139+ libgearman-server/gearmand.h \
140+ libgearman-server/gearmand_con.h \
141+ libgearman-server/gearmand_thread.h \
142+ examples
143
144 # This tag can be used to specify the character encoding of the source files
145 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
146@@ -551,7 +579,7 @@
147 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
148 # *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
149
150-FILE_PATTERNS = *.h
151+FILE_PATTERNS = *.h *.c
152
153 # The RECURSIVE tag can be used to turn specify whether or not subdirectories
154 # should be searched for input files as well. Possible values are YES and NO.
155@@ -563,7 +591,7 @@
156 # excluded from the INPUT source files. This way you can easily exclude a
157 # subdirectory from a directory tree whose root is specified with the INPUT tag.
158
159-EXCLUDE = libgearman/common.h libgearman/structs.h libgearman-server/common.h libgearman-server/structs.h
160+EXCLUDE =
161
162 # The EXCLUDE_SYMLINKS tag can be used select whether or not files or
163 # directories that are symbolic links (a Unix filesystem feature) are excluded
164@@ -747,7 +775,7 @@
165 # each generated HTML page. If it is left blank doxygen will generate a
166 # standard footer.
167
168-HTML_FOOTER =
169+HTML_FOOTER =
170
171 # The HTML_STYLESHEET tag can be used to specify a user-defined cascading
172 # style sheet that is used by each HTML page. It can be used to
173
174=== modified file 'docs/Doxyfile.dev'
175--- docs/Doxyfile.dev 2009-09-25 00:04:06 +0000
176+++ docs/Doxyfile.dev 2009-11-04 22:14:13 +0000
177@@ -534,7 +534,37 @@
178 # directories like "/usr/src/myproject". Separate the files or directories
179 # with spaces.
180
181-INPUT = docs libgearman libgearman-server examples
182+INPUT = docs/doxygen.h \
183+ libgearman/constants.h \
184+ libgearman/client.h \
185+ libgearman/task.h \
186+ libgearman/worker.h \
187+ libgearman/job.h \
188+ libgearman/gearman.h \
189+ libgearman/conn.h \
190+ libgearman/packet.h \
191+ libgearman \
192+ libgearman-server/constants.h \
193+ libgearman-server/client.h \
194+ libgearman-server/conf.h \
195+ libgearman-server/conf_module.h \
196+ libgearman-server/conn.h \
197+ libgearman-server/function.h \
198+ libgearman-server/job.h \
199+ libgearman-server/packet.h \
200+ libgearman-server/server.h \
201+ libgearman-server/thread.h \
202+ libgearman-server/worker.h \
203+ libgearman-server/protocol_http.h \
204+ libgearman-server/queue_libdrizzle.h \
205+ libgearman-server/queue_libmemcached.h \
206+ libgearman-server/queue_libpq.h \
207+ libgearman-server/queue_libsqlite3.h \
208+ libgearman-server/gearmand.h \
209+ libgearman-server/gearmand_con.h \
210+ libgearman-server/gearmand_thread.h \
211+ libgearman-server \
212+ examples
213
214 # This tag can be used to specify the character encoding of the source files
215 # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
216
217=== modified file 'examples/reverse_worker.c'
218--- examples/reverse_worker.c 2009-09-28 17:47:34 +0000
219+++ examples/reverse_worker.c 2009-11-04 22:14:13 +0000
220@@ -27,8 +27,8 @@
221 REVERSE_WORKER_OPTIONS_UNIQUE= (1 << 2)
222 } reverse_worker_options_t;
223
224-static void *reverse(gearman_job_st *job, void *cb_arg, size_t *result_size,
225- gearman_return_t *ret_ptr);
226+static void *reverse(gearman_job_st *job, void *context,
227+ size_t *result_size, gearman_return_t *ret_ptr);
228
229 static void usage(char *name);
230
231@@ -136,10 +136,10 @@
232 return 0;
233 }
234
235-static void *reverse(gearman_job_st *job, void *cb_arg, size_t *result_size,
236- gearman_return_t *ret_ptr)
237+static void *reverse(gearman_job_st *job, void *context,
238+ size_t *result_size, gearman_return_t *ret_ptr)
239 {
240- reverse_worker_options_t options= *((reverse_worker_options_t *)cb_arg);
241+ reverse_worker_options_t options= *((reverse_worker_options_t *)context);
242 const uint8_t *workload;
243 uint8_t *result;
244 size_t x;
245
246=== modified file 'examples/wc_worker.c'
247--- examples/wc_worker.c 2009-06-14 07:26:30 +0000
248+++ examples/wc_worker.c 2009-11-04 22:14:14 +0000
249@@ -19,7 +19,7 @@
250
251 #include <libgearman/gearman.h>
252
253-static void *wc(gearman_job_st *job, void *cb_arg, size_t *result_size,
254+static void *wc(gearman_job_st *job, void *context, size_t *result_size,
255 gearman_return_t *ret_ptr);
256
257 static void usage(char *name);
258@@ -97,14 +97,14 @@
259 return 0;
260 }
261
262-static void *wc(gearman_job_st *job, void *cb_arg, size_t *result_size,
263+static void *wc(gearman_job_st *job, void *context, size_t *result_size,
264 gearman_return_t *ret_ptr)
265 {
266 const uint8_t *workload;
267 uint8_t *result;
268 size_t x;
269 uint64_t count= 0;
270- (void)cb_arg;
271+ (void)context;
272
273 workload= gearman_job_workload(job);
274 *result_size= gearman_job_workload_size(job);
275
276=== modified file 'gearmand/gearmand.c'
277--- gearmand/gearmand.c 2009-09-24 23:43:15 +0000
278+++ gearmand/gearmand.c 2009-11-04 22:14:14 +0000
279@@ -102,6 +102,7 @@
280 int backlog= GEARMAND_LISTEN_BACKLOG;
281 rlim_t fds= 0;
282 uint8_t job_retries= 0;
283+ uint8_t worker_wakeup= 0;
284 in_port_t port= 0;
285 const char *host= NULL;
286 const char *pid_file= NULL;
287@@ -157,6 +158,9 @@
288 MCO("user", 'u', "USER", "Switch to given user after startup.")
289 MCO("verbose", 'v', NULL, "Increase verbosity level by one.")
290 MCO("version", 'V', NULL, "Display the version of gearmand and exit.")
291+ MCO("worker-wakeup", 'w', "WORKERS",
292+ "Number of workers to wakeup for each job received. The default is to "
293+ "wakeup all avaiable workers.")
294
295 /* Make sure none of the gearman_conf_module_add_option calls failed. */
296 if (gearman_conf_return(&conf) != GEARMAN_SUCCESS)
297@@ -280,6 +284,8 @@
298 verbose++;
299 else if (!strcmp(name, "version"))
300 printf("\ngearmand %s - %s\n", gearman_version(), gearman_bugreport());
301+ else if (!strcmp(name, "worker-wakeup"))
302+ worker_wakeup= (uint8_t)atoi(value);
303 else
304 {
305 fprintf(stderr, "gearmand: Unknown option:%s\n", name);
306@@ -331,6 +337,7 @@
307 gearmand_set_backlog(_gearmand, backlog);
308 gearmand_set_threads(_gearmand, threads);
309 gearmand_set_job_retries(_gearmand, job_retries);
310+ gearmand_set_worker_wakeup(_gearmand, worker_wakeup);
311 gearmand_set_log_fn(_gearmand, _log, &log_info, verbose);
312
313 if (queue_type != NULL)
314
315=== modified file 'libgearman-server/client.h'
316--- libgearman-server/client.h 2009-09-24 23:43:15 +0000
317+++ libgearman-server/client.h 2009-11-04 22:14:14 +0000
318@@ -8,7 +8,7 @@
319
320 /**
321 * @file
322- * @brief Server client declarations
323+ * @brief Client Declarations
324 */
325
326 #ifndef __GEARMAN_SERVER_CLIENT_H__
327@@ -19,10 +19,12 @@
328 #endif
329
330 /**
331- * @addtogroup gearman_server_client Server Client Handling
332+ * @addtogroup gearman_server_client Client Declarations
333 * @ingroup gearman_server
334+ *
335 * This is a low level interface for gearman server clients. This is used
336 * internally by the server interface, so you probably want to look there first.
337+ *
338 * @{
339 */
340
341
342=== modified file 'libgearman-server/common.h'
343--- libgearman-server/common.h 2009-09-24 23:43:15 +0000
344+++ libgearman-server/common.h 2009-11-04 22:14:14 +0000
345@@ -8,7 +8,7 @@
346
347 /**
348 * @file
349- * @brief System include files
350+ * @brief System Include Files
351 */
352
353 #ifndef __GEARMAN_SERVER_COMMON_H__
354@@ -106,8 +106,10 @@
355 * Macro to log fatal errors.
356 * @ingroup gearman_constants
357 */
358-#define GEARMAN_FATAL(__gearman, ...) \
359- GEARMAN_LOG(__gearman, GEARMAN_VERBOSE_FATAL, __VA_ARGS__)
360+#define GEARMAN_FATAL(__gearman, ...) { \
361+ unlikely ((__gearman)->verbose >= GEARMAN_VERBOSE_FATAL) \
362+ GEARMAN_LOG(__gearman, GEARMAN_VERBOSE_FATAL, __VA_ARGS__) \
363+}
364 #define GEARMAN_SERVER_FATAL(__server, ...) \
365 GEARMAN_FATAL((__server)->gearman, __VA_ARGS__)
366
367
368=== modified file 'libgearman-server/conf.h'
369--- libgearman-server/conf.h 2009-09-24 23:43:15 +0000
370+++ libgearman-server/conf.h 2009-11-04 22:14:14 +0000
371@@ -8,7 +8,7 @@
372
373 /**
374 * @file
375- * @brief Gearman conf declarations
376+ * @brief Configuration Declarations
377 */
378
379 #ifndef __GEARMAN_SERVER_CONF_H__
380@@ -19,7 +19,8 @@
381 #endif
382
383 /**
384- * @addtogroup gearman_conf Gearman Conf Interface
385+ * @addtogroup gearman_conf Configuration Declarations
386+ * @ingroup gearman_server
387 * @{
388 */
389
390
391=== modified file 'libgearman-server/conf_module.h'
392--- libgearman-server/conf_module.h 2009-09-24 23:43:15 +0000
393+++ libgearman-server/conf_module.h 2009-11-04 22:14:14 +0000
394@@ -8,7 +8,7 @@
395
396 /**
397 * @file
398- * @brief Gearman conf module declarations
399+ * @brief Configuration Module Declarations
400 */
401
402 #ifndef __GEARMAN_SERVER_CONF_MODULE_H__
403@@ -19,7 +19,8 @@
404 #endif
405
406 /**
407- * @addtogroup gearman_conf_module Gearman conf module interface
408+ * @addtogroup gearman_conf_module Configuration Module Declarations
409+ * @ingroup gearman_server
410 * @{
411 */
412
413
414=== modified file 'libgearman-server/conn.c'
415--- libgearman-server/conn.c 2009-09-24 23:43:15 +0000
416+++ libgearman-server/conn.c 2009-11-04 22:14:14 +0000
417@@ -66,7 +66,7 @@
418 }
419 }
420
421- if (gearman_con_create(thread->gearman, &(con->con)) == NULL)
422+ if (gearman_add_con(thread->gearman, &(con->con)) == NULL)
423 {
424 free(con);
425 return NULL;
426
427=== modified file 'libgearman-server/conn.h'
428--- libgearman-server/conn.h 2009-09-24 23:43:15 +0000
429+++ libgearman-server/conn.h 2009-11-04 22:14:14 +0000
430@@ -8,7 +8,7 @@
431
432 /**
433 * @file
434- * @brief Server connection declarations
435+ * @brief Connection Declarations
436 */
437
438 #ifndef __GEARMAN_SERVER_CON_H__
439@@ -19,10 +19,12 @@
440 #endif
441
442 /**
443- * @addtogroup gearman_server_con Server Connection Handling
444+ * @addtogroup gearman_server_con Connection Declarations
445 * @ingroup gearman_server
446+ *
447 * This is a low level interface for gearman server connections. This is used
448 * internally by the server interface, so you probably want to look there first.
449+ *
450 * @{
451 */
452
453
454=== modified file 'libgearman-server/constants.h'
455--- libgearman-server/constants.h 2009-09-25 00:04:06 +0000
456+++ libgearman-server/constants.h 2009-11-04 22:14:14 +0000
457@@ -19,7 +19,8 @@
458 #endif
459
460 /**
461- * @addtogroup gearman_server_constants Gearman Server Constants
462+ * @addtogroup gearman_server_constants Constants
463+ * @ingroup gearman_server
464 * @{
465 */
466
467@@ -38,23 +39,6 @@
468 #define GEARMAN_CONF_MAX_OPTION_SHORT 128
469 #define GEARMAN_CONF_DISPLAY_WIDTH 80
470
471-/* Types. */
472-typedef struct gearman_server_st gearman_server_st;
473-typedef struct gearman_server_thread_st gearman_server_thread_st;
474-typedef struct gearman_server_con_st gearman_server_con_st;
475-typedef struct gearman_server_packet_st gearman_server_packet_st;
476-typedef struct gearman_server_function_st gearman_server_function_st;
477-typedef struct gearman_server_client_st gearman_server_client_st;
478-typedef struct gearman_server_worker_st gearman_server_worker_st;
479-typedef struct gearman_server_job_st gearman_server_job_st;
480-typedef struct gearmand_st gearmand_st;
481-typedef struct gearmand_port_st gearmand_port_st;
482-typedef struct gearmand_con_st gearmand_con_st;
483-typedef struct gearmand_thread_st gearmand_thread_st;
484-typedef struct gearman_conf_st gearman_conf_st;
485-typedef struct gearman_conf_option_st gearman_conf_option_st;
486-typedef struct gearman_conf_module_st gearman_conf_module_st;
487-
488 /** @} */
489
490 /**
491@@ -180,10 +164,28 @@
492
493
494 /**
495- * @addtogroup gearman_server_constants Gearman Server Constants
496+ * @addtogroup gearman_server_types Types
497+ * @ingroup gearman_server
498 * @{
499 */
500
501+/* Types. */
502+typedef struct gearman_server_st gearman_server_st;
503+typedef struct gearman_server_thread_st gearman_server_thread_st;
504+typedef struct gearman_server_con_st gearman_server_con_st;
505+typedef struct gearman_server_packet_st gearman_server_packet_st;
506+typedef struct gearman_server_function_st gearman_server_function_st;
507+typedef struct gearman_server_client_st gearman_server_client_st;
508+typedef struct gearman_server_worker_st gearman_server_worker_st;
509+typedef struct gearman_server_job_st gearman_server_job_st;
510+typedef struct gearmand_st gearmand_st;
511+typedef struct gearmand_port_st gearmand_port_st;
512+typedef struct gearmand_con_st gearmand_con_st;
513+typedef struct gearmand_thread_st gearmand_thread_st;
514+typedef struct gearman_conf_st gearman_conf_st;
515+typedef struct gearman_conf_option_st gearman_conf_option_st;
516+typedef struct gearman_conf_module_st gearman_conf_module_st;
517+
518 /* Function types. */
519 typedef void (gearman_server_thread_run_fn)(gearman_server_thread_st *thread,
520 void *context);
521@@ -214,6 +216,16 @@
522
523 /** @} */
524
525+/**
526+ * @addtogroup gearman_server_protocol Protocol Plugins
527+ * @ingroup gearman_server
528+ */
529+
530+/**
531+ * @addtogroup gearman_server_queue Queue Plugins
532+ * @ingroup gearman_server
533+ */
534+
535 #ifdef __cplusplus
536 }
537 #endif
538
539=== modified file 'libgearman-server/function.h'
540--- libgearman-server/function.h 2009-09-24 23:43:15 +0000
541+++ libgearman-server/function.h 2009-11-04 22:14:14 +0000
542@@ -8,7 +8,7 @@
543
544 /**
545 * @file
546- * @brief Server function declarations
547+ * @brief Function Declarations
548 */
549
550 #ifndef __GEARMAN_SERVER_FUNCTION_H__
551@@ -19,10 +19,12 @@
552 #endif
553
554 /**
555- * @addtogroup gearman_server_function Server Function Handling
556+ * @addtogroup gearman_server_function Function Declarations
557 * @ingroup gearman_server
558+ *
559 * This is a low level interface for gearman server functions. This is used
560 * internally by the server interface, so you probably want to look there first.
561+ *
562 * @{
563 */
564
565
566=== modified file 'libgearman-server/gearmand.c'
567--- libgearman-server/gearmand.c 2009-09-24 23:43:15 +0000
568+++ libgearman-server/gearmand.c 2009-11-04 22:14:14 +0000
569@@ -146,6 +146,11 @@
570 gearman_server_set_job_retries(&(gearmand->server), job_retries);
571 }
572
573+void gearmand_set_worker_wakeup(gearmand_st *gearmand, uint8_t worker_wakeup)
574+{
575+ gearman_server_set_worker_wakeup(&(gearmand->server), worker_wakeup);
576+}
577+
578 void gearmand_set_threads(gearmand_st *gearmand, uint32_t threads)
579 {
580 gearmand->threads= threads;
581
582=== modified file 'libgearman-server/gearmand.h'
583--- libgearman-server/gearmand.h 2009-09-24 23:43:15 +0000
584+++ libgearman-server/gearmand.h 2009-11-04 22:14:14 +0000
585@@ -8,7 +8,7 @@
586
587 /**
588 * @file
589- * @brief Gearmand declarations
590+ * @brief Gearmand Declarations
591 */
592
593 #ifndef __GEARMAND_H__
594@@ -23,8 +23,10 @@
595 #endif
596
597 /**
598- * @addtogroup gearmand Gearmand
599+ * @addtogroup gearmand Gearmand Declarations
600+ *
601 * This is a server implementation using the gearman_server interface.
602+ *
603 * @{
604 */
605
606@@ -64,6 +66,15 @@
607 void gearmand_set_job_retries(gearmand_st *gearmand, uint8_t job_retries);
608
609 /**
610+ * Set maximum number of workers to wake up per job.
611+ * @param gearmand Server instance structure previously initialized with
612+ * gearmand_create.
613+ * @param worker_wakeup Number of workers to wake up.
614+ */
615+GEARMAN_API
616+void gearmand_set_worker_wakeup(gearmand_st *gearmand, uint8_t worker_wakeup);
617+
618+/**
619 * Set number of I/O threads for server to use.
620 * @param gearmand Server instance structure previously initialized with
621 * gearmand_create.
622
623=== modified file 'libgearman-server/gearmand_con.c'
624--- libgearman-server/gearmand_con.c 2009-09-24 23:43:15 +0000
625+++ libgearman-server/gearmand_con.c 2009-11-04 22:14:14 +0000
626@@ -178,9 +178,9 @@
627 }
628
629 gearman_return_t gearmand_con_watch(gearman_con_st *con, short events,
630- void *arg __attribute__ ((unused)))
631+ void *context __attribute__ ((unused)))
632 {
633- (void) arg;
634+ (void) context;
635 gearmand_con_st *dcon;
636 short set_events= 0;
637
638
639=== modified file 'libgearman-server/gearmand_con.h'
640--- libgearman-server/gearmand_con.h 2009-09-24 23:43:15 +0000
641+++ libgearman-server/gearmand_con.h 2009-11-04 22:14:14 +0000
642@@ -8,7 +8,7 @@
643
644 /**
645 * @file
646- * @brief Gearmand Connection Declarations
647+ * @brief Connection Declarations
648 */
649
650 #ifndef __GEARMAND_CON_H__
651@@ -19,8 +19,11 @@
652 #endif
653
654 /**
655- * @addtogroup gearmand_con Gearmand Connections
656+ * @addtogroup gearmand_con Connection Declarations
657+ * @ingroup gearmand
658+ *
659 * Connection handling for gearmand.
660+ *
661 * @{
662 */
663
664@@ -58,7 +61,7 @@
665 */
666 GEARMAN_API
667 gearman_return_t gearmand_con_watch(gearman_con_st *con, short events,
668- void *arg);
669+ void *context);
670
671 /** @} */
672
673
674=== modified file 'libgearman-server/gearmand_thread.h'
675--- libgearman-server/gearmand_thread.h 2009-09-24 23:43:15 +0000
676+++ libgearman-server/gearmand_thread.h 2009-11-04 22:14:14 +0000
677@@ -8,7 +8,7 @@
678
679 /**
680 * @file
681- * @brief Gearmand Thread Declarations
682+ * @brief Thread Declarations
683 */
684
685 #ifndef __GEARMAND_THREAD_H__
686@@ -19,8 +19,11 @@
687 #endif
688
689 /**
690- * @addtogroup gearmand_thread Gearmand Threads
691+ * @addtogroup gearmand_thread Thread Declarations
692+ * @ingroup gearmand
693+ *
694 * Thread handling for gearmand.
695+ *
696 * @{
697 */
698
699
700=== modified file 'libgearman-server/job.c'
701--- libgearman-server/job.c 2009-09-26 17:11:51 +0000
702+++ libgearman-server/job.c 2009-11-04 22:14:14 +0000
703@@ -380,6 +380,7 @@
704 {
705 gearman_server_client_st *client;
706 gearman_server_worker_st *worker;
707+ uint32_t noop_sent;
708 gearman_return_t ret;
709
710 if (job->worker != NULL)
711@@ -415,22 +416,32 @@
712 }
713
714 /* Queue NOOP for possible sleeping workers. */
715- for (worker= job->function->worker_list; worker != NULL;
716- worker= worker->function_next)
717+ if (job->function->worker_list != NULL)
718 {
719- if (!(worker->con->options & GEARMAN_SERVER_CON_SLEEPING) ||
720- worker->con->options & GEARMAN_SERVER_CON_NOOP_SENT)
721+ worker= job->function->worker_list;
722+ noop_sent= 0;
723+ do
724 {
725- continue;
726+ if (worker->con->options & GEARMAN_SERVER_CON_SLEEPING &&
727+ !(worker->con->options & GEARMAN_SERVER_CON_NOOP_SENT))
728+ {
729+ ret= gearman_server_io_packet_add(worker->con, false,
730+ GEARMAN_MAGIC_RESPONSE,
731+ GEARMAN_COMMAND_NOOP, NULL);
732+ if (ret != GEARMAN_SUCCESS)
733+ return ret;
734+
735+ worker->con->options|= GEARMAN_SERVER_CON_NOOP_SENT;
736+ noop_sent++;
737+ }
738+
739+ worker= worker->function_next;
740 }
741-
742- ret= gearman_server_io_packet_add(worker->con, false,
743- GEARMAN_MAGIC_RESPONSE,
744- GEARMAN_COMMAND_NOOP, NULL);
745- if (ret != GEARMAN_SUCCESS)
746- return ret;
747-
748- worker->con->options|= GEARMAN_SERVER_CON_NOOP_SENT;
749+ while (worker != job->function->worker_list &&
750+ (job->server->worker_wakeup == 0 ||
751+ noop_sent < job->server->worker_wakeup));
752+
753+ job->function->worker_list= worker;
754 }
755
756 /* Queue the job to be run. */
757
758=== modified file 'libgearman-server/job.h'
759--- libgearman-server/job.h 2009-09-24 23:43:15 +0000
760+++ libgearman-server/job.h 2009-11-04 22:14:14 +0000
761@@ -8,7 +8,7 @@
762
763 /**
764 * @file
765- * @brief Server job declarations
766+ * @brief Job Declarations
767 */
768
769 #ifndef __GEARMAN_SERVER_JOB_H__
770@@ -19,10 +19,12 @@
771 #endif
772
773 /**
774- * @addtogroup gearman_server_job Server Job Handling
775+ * @addtogroup gearman_server_job Job Declarations
776 * @ingroup gearman_server
777+ *
778 * This is a low level interface for gearman server jobs. This is used
779 * internally by the server interface, so you probably want to look there first.
780+ *
781 * @{
782 */
783
784
785=== modified file 'libgearman-server/packet.c'
786--- libgearman-server/packet.c 2009-09-24 23:43:15 +0000
787+++ libgearman-server/packet.c 2009-11-04 22:14:14 +0000
788@@ -101,8 +101,8 @@
789 if (server_packet == NULL)
790 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
791
792- if (gearman_packet_create(con->thread->gearman,
793- &(server_packet->packet)) == NULL)
794+ if (gearman_add_packet(con->thread->gearman,
795+ &(server_packet->packet)) == NULL)
796 {
797 gearman_server_packet_free(server_packet, con->thread, false);
798 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
799
800=== modified file 'libgearman-server/packet.h'
801--- libgearman-server/packet.h 2009-09-24 23:43:15 +0000
802+++ libgearman-server/packet.h 2009-11-04 22:14:14 +0000
803@@ -8,7 +8,7 @@
804
805 /**
806 * @file
807- * @brief Server Packet declarations
808+ * @brief Packet Declarations
809 */
810
811 #ifndef __GEARMAN_SERVER_PACKET_H__
812@@ -19,10 +19,12 @@
813 #endif
814
815 /**
816- * @addtogroup gearman_server_con Server Connection Handling
817+ * @addtogroup gearman_server_packet Packet Declarations
818 * @ingroup gearman_server
819+ *
820 * This is a low level interface for gearman server connections. This is used
821 * internally by the server interface, so you probably want to look there first.
822+ *
823 * @{
824 */
825
826
827=== modified file 'libgearman-server/protocol_http.c'
828--- libgearman-server/protocol_http.c 2009-09-24 23:43:15 +0000
829+++ libgearman-server/protocol_http.c 2009-11-04 22:14:14 +0000
830@@ -17,8 +17,8 @@
831 #include <libgearman-server/protocol_http.h>
832
833 /**
834- * @addtogroup gearman_protocol_http HTTP Protocol Functions
835- * @ingroup gearman_protocol
836+ * @addtogroup gearman_protocol_http_static Static HTTP Protocol Definitions
837+ * @ingroup gearman_protocol_http
838 * @{
839 */
840
841@@ -27,10 +27,6 @@
842 */
843 #define GEARMAN_PROTOCOL_HTTP_DEFAULT_PORT 8080
844
845-/*
846- * Private declarations
847- */
848-
849 /**
850 * Structure for HTTP specific data.
851 */
852@@ -42,7 +38,7 @@
853
854 /* Protocol callback functions. */
855 static gearman_return_t _http_con_add(gearman_con_st *con);
856-static void _http_free(gearman_con_st *con , void *data);
857+static void _http_free(gearman_con_st *con, void *context);
858 static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con,
859 void *data, size_t data_size,
860 gearman_return_t *ret_ptr);
861@@ -115,7 +111,7 @@
862 }
863
864 /*
865- * Private definitions
866+ * Static definitions
867 */
868
869 static gearman_return_t _http_con_add(gearman_con_st *con)
870@@ -140,9 +136,10 @@
871 return GEARMAN_SUCCESS;
872 }
873
874-static void _http_free(gearman_con_st *con __attribute__ ((unused)), void *data)
875+static void _http_free(gearman_con_st *con __attribute__ ((unused)),
876+ void *context)
877 {
878- free(data);
879+ free((gearman_protocol_http_st *)context);
880 }
881
882 static size_t _http_pack(const gearman_packet_st *packet, gearman_con_st *con,
883
884=== modified file 'libgearman-server/protocol_http.h'
885--- libgearman-server/protocol_http.h 2009-09-24 23:43:15 +0000
886+++ libgearman-server/protocol_http.h 2009-11-04 22:14:14 +0000
887@@ -19,20 +19,24 @@
888 #endif
889
890 /**
891- * @addtogroup gearman_protocol_http HTTP Protocol Functions
892- * @ingroup gearman_protocol
893+ * @addtogroup gearman_protocol_http HTTP Protocol Declarations
894+ * @ingroup gearman_server_protocol
895+ *
896 * This module provides a simple HTTP interface into the Gearman job server. It
897 * is also meant to serve as an example of how other protocols can plug into
898 * the server. This module will ignore all headers except:
899+ *
900 * Content-Length: SIZE
901 * Connection: Keep-Alive
902 * X-Gearman-Unique: UNIQUE_KEY
903 * X-Gearman-Background: true
904 * X-Gearman-Priority: HIGH | LOW
905+ *
906 * All HTTP requests are translated into SUBMIT_JOB requests, and only
907 * WORK_COMPLETE, WORK_FAIL, and JOB_CREATED responses are returned.
908 * JOB_CREATED packet are only sent back if the "X-Gearman-Background: true"
909 * header is given.
910+ *
911 * @{
912 */
913
914
915=== modified file 'libgearman-server/queue_libdrizzle.c'
916--- libgearman-server/queue_libdrizzle.c 2009-09-24 23:43:15 +0000
917+++ libgearman-server/queue_libdrizzle.c 2009-11-04 22:14:14 +0000
918@@ -8,7 +8,7 @@
919
920 /**
921 * @file
922- * @brief Drizzle Queue Storage Definitions
923+ * @brief libdrizzle Queue Storage Definitions
924 */
925
926 #include "common.h"
927@@ -17,8 +17,8 @@
928 #include <libdrizzle/drizzle_client.h>
929
930 /**
931- * @addtogroup gearman_queue_libdrizzle libdrizzle Queue Storage Functions
932- * @ingroup gearman_queue
933+ * @addtogroup gearman_queue_libdrizzle_static Static libdrizzle Queue Storage Definitions
934+ * @ingroup gearman_queue_libdrizzle
935 * @{
936 */
937
938@@ -29,10 +29,6 @@
939 #define GEARMAN_QUEUE_LIBDRIZZLE_DEFAULT_TABLE "queue"
940 #define GEARMAN_QUEUE_QUERY_BUFFER 256
941
942-/*
943- * Private declarations
944- */
945-
946 /**
947 * Structure for libdrizzle specific data.
948 */
949@@ -289,7 +285,7 @@
950 }
951
952 /*
953- * Private definitions
954+ * Static definitions
955 */
956
957 static drizzle_return_t _libdrizzle_query(gearman_server_st *server,
958
959=== modified file 'libgearman-server/queue_libdrizzle.h'
960--- libgearman-server/queue_libdrizzle.h 2009-09-24 23:43:15 +0000
961+++ libgearman-server/queue_libdrizzle.h 2009-11-04 22:14:14 +0000
962@@ -19,8 +19,8 @@
963 #endif
964
965 /**
966- * @addtogroup gearman_queue_libdrizzle libdrizzle Queue Storage Functions
967- * @ingroup gearman_queue
968+ * @addtogroup gearman_queue_libdrizzle libdrizzle Queue Storage Declarations
969+ * @ingroup gearman_server_queue
970 * @{
971 */
972
973
974=== modified file 'libgearman-server/queue_libmemcached.c'
975--- libgearman-server/queue_libmemcached.c 2009-09-24 23:43:15 +0000
976+++ libgearman-server/queue_libmemcached.c 2009-11-04 22:14:14 +0000
977@@ -8,7 +8,7 @@
978
979 /**
980 * @file
981- * @brief Drizzle Queue Storage Definitions
982+ * @brief libmemcached Queue Storage Definitions
983 */
984
985 #include "common.h"
986@@ -17,8 +17,8 @@
987 #include <libmemcached/memcached.h>
988
989 /**
990- * @addtogroup gearman_queue_libmemcached libmemcached Queue Storage Functions
991- * @ingroup gearman_queue
992+ * @addtogroup gearman_queue_libmemcached_static Static libmemcached Queue Storage Functions
993+ * @ingroup gearman_queue_libmemcached
994 * @{
995 */
996
997@@ -27,10 +27,6 @@
998 */
999 #define GEARMAN_QUEUE_LIBMEMCACHED_DEFAULT_PREFIX "gear_"
1000
1001-/*
1002- * Private declarations
1003- */
1004-
1005 /**
1006 * Structure for libmemcached specific data.
1007 */
1008@@ -191,7 +187,7 @@
1009 }
1010
1011 /*
1012- * Private definitions
1013+ * Static definitions
1014 */
1015
1016 static gearman_return_t _libmemcached_add(gearman_server_st *server,
1017
1018=== modified file 'libgearman-server/queue_libmemcached.h'
1019--- libgearman-server/queue_libmemcached.h 2009-09-24 23:43:15 +0000
1020+++ libgearman-server/queue_libmemcached.h 2009-11-04 22:14:14 +0000
1021@@ -19,8 +19,8 @@
1022 #endif
1023
1024 /**
1025- * @addtogroup gearman_queue_libmemcached libmemcached Queue Storage Functions
1026- * @ingroup gearman_queue
1027+ * @addtogroup gearman_queue_libmemcached libmemcached Queue Storage Declarations
1028+ * @ingroup gearman_server_queue
1029 * @{
1030 */
1031
1032
1033=== modified file 'libgearman-server/queue_libpq.c'
1034--- libgearman-server/queue_libpq.c 2009-09-24 23:43:15 +0000
1035+++ libgearman-server/queue_libpq.c 2009-11-04 22:14:14 +0000
1036@@ -8,7 +8,7 @@
1037
1038 /**
1039 * @file
1040- * @brief PostgreSQL Queue Storage Definitions
1041+ * @brief libpq Queue Storage Definitions
1042 */
1043
1044 #include "common.h"
1045@@ -24,8 +24,8 @@
1046 #endif
1047
1048 /**
1049- * @addtogroup gearman_queue_libpq libpq Queue Storage Functions
1050- * @ingroup gearman_queue
1051+ * @addtogroup gearman_queue_libpq_static Static libpq Queue Storage Definitions
1052+ * @ingroup gearman_queue_libpq
1053 * @{
1054 */
1055
1056@@ -35,10 +35,6 @@
1057 #define GEARMAN_QUEUE_LIBPQ_DEFAULT_TABLE "queue"
1058 #define GEARMAN_QUEUE_QUERY_BUFFER 256
1059
1060-/*
1061- * Private declarations
1062- */
1063-
1064 /**
1065 * Structure for libpq specific data.
1066 */
1067@@ -241,7 +237,7 @@
1068 }
1069
1070 /*
1071- * Private definitions
1072+ * Static definitions
1073 */
1074
1075 static void _libpq_notice_processor(void *arg, const char *message)
1076
1077=== modified file 'libgearman-server/queue_libpq.h'
1078--- libgearman-server/queue_libpq.h 2009-09-24 23:43:15 +0000
1079+++ libgearman-server/queue_libpq.h 2009-11-04 22:14:14 +0000
1080@@ -19,8 +19,8 @@
1081 #endif
1082
1083 /**
1084- * @addtogroup gearman_queue_libpq libpq Queue Storage Functions
1085- * @ingroup gearman_queue
1086+ * @addtogroup gearman_queue_libpq libpq Queue Storage Declarations
1087+ * @ingroup gearman_server_queue
1088 * @{
1089 */
1090
1091
1092=== modified file 'libgearman-server/queue_libsqlite3.c'
1093--- libgearman-server/queue_libsqlite3.c 2009-09-24 23:43:15 +0000
1094+++ libgearman-server/queue_libsqlite3.c 2009-11-04 22:14:14 +0000
1095@@ -8,7 +8,7 @@
1096
1097 /**
1098 * @file
1099- * @brief Sqlite Queue Storage Definitions
1100+ * @brief libsqlite3 Queue Storage Definitions
1101 */
1102
1103 #include "common.h"
1104@@ -17,8 +17,8 @@
1105 #include <sqlite3.h>
1106
1107 /**
1108- * @addtogroup gearman_queue_sqlite sqlite Queue Storage Functions
1109- * @ingroup gearman_queue
1110+ * @addtogroup gearman_queue_libsqlite3_static Static libsqlite3 Queue Storage Definitions
1111+ * @ingroup gearman_queue_libsqlite3
1112 * @{
1113 */
1114
1115@@ -27,10 +27,6 @@
1116 */
1117 #define GEARMAN_QUEUE_SQLITE_DEFAULT_TABLE "gearman_queue"
1118 #define GEARMAN_QUEUE_QUERY_BUFFER 256
1119-
1120-/*
1121- * Private declarations
1122- */
1123 #define SQLITE_MAX_TABLE_SIZE 256
1124 #define SQLITE_MAX_CREATE_TABLE_SIZE 1024
1125
1126@@ -281,7 +277,7 @@
1127 }
1128
1129 /*
1130- * Private definitions
1131+ * Static definitions
1132 */
1133
1134 int _sqlite_query(gearman_server_st *server,
1135
1136=== modified file 'libgearman-server/queue_libsqlite3.h'
1137--- libgearman-server/queue_libsqlite3.h 2009-09-24 23:43:15 +0000
1138+++ libgearman-server/queue_libsqlite3.h 2009-11-04 22:14:14 +0000
1139@@ -19,8 +19,8 @@
1140 #endif
1141
1142 /**
1143- * @addtogroup gearman_queue_libsqlite3 libsqlite3 Queue Storage Functions
1144- * @ingroup gearman_queue
1145+ * @addtogroup gearman_queue_libsqlite3 libsqlite3 Queue Storage Declarations
1146+ * @ingroup gearman_server_queue
1147 * @{
1148 */
1149
1150
1151=== modified file 'libgearman-server/server.c'
1152--- libgearman-server/server.c 2009-09-24 23:43:15 +0000
1153+++ libgearman-server/server.c 2009-11-04 22:14:14 +0000
1154@@ -84,6 +84,7 @@
1155 server->proc_wakeup= false;
1156 server->proc_shutdown= false;
1157 server->job_retries= 0;
1158+ server->worker_wakeup= 0;
1159 server->thread_count= 0;
1160 server->free_packet_count= 0;
1161 server->function_count= 0;
1162@@ -191,6 +192,12 @@
1163 server->job_retries= job_retries;
1164 }
1165
1166+void gearman_server_set_worker_wakeup(gearman_server_st *server,
1167+ uint8_t worker_wakeup)
1168+{
1169+ server->worker_wakeup= worker_wakeup;
1170+}
1171+
1172 void gearman_server_set_log_fn(gearman_server_st *server,
1173 gearman_log_fn *function,
1174 const void *context, gearman_verbose_t verbose)
1175@@ -906,8 +913,8 @@
1176 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
1177 }
1178
1179- if (gearman_packet_create(server_con->thread->gearman,
1180- &(server_packet->packet)) == NULL)
1181+ if (gearman_add_packet(server_con->thread->gearman,
1182+ &(server_packet->packet)) == NULL)
1183 {
1184 free(data);
1185 gearman_server_packet_free(server_packet, server_con->thread, false);
1186
1187=== modified file 'libgearman-server/server.h'
1188--- libgearman-server/server.h 2009-09-24 23:43:15 +0000
1189+++ libgearman-server/server.h 2009-11-04 22:14:14 +0000
1190@@ -15,6 +15,8 @@
1191 #define __GEARMAN_SERVER_H__
1192
1193 #include <libgearman/gearman.h>
1194+#include <event.h>
1195+
1196 #include <libgearman-server/constants.h>
1197 #include <libgearman-server/structs.h>
1198 #include <libgearman-server/conf.h>
1199@@ -32,7 +34,7 @@
1200 #endif
1201
1202 /**
1203- * @addtogroup gearman_server Server Interface
1204+ * @addtogroup gearman_server Gearman Server Declarations
1205 * This is the interface gearman servers should use.
1206 * @{
1207 */
1208@@ -66,6 +68,16 @@
1209 uint8_t job_retries);
1210
1211 /**
1212+ * Set maximum number of workers to wake up per job.
1213+ * @param server Server structure previously initialized with
1214+ * gearman_server_create.
1215+ * @param worker_wakeup Number of workers to wake up.
1216+ */
1217+GEARMAN_API
1218+void gearman_server_set_worker_wakeup(gearman_server_st *server,
1219+ uint8_t worker_wakeup);
1220+
1221+/**
1222 * Set logging callback for server instance.
1223 * @param server Server structure previously initialized with
1224 * gearman_server_create.
1225
1226=== modified file 'libgearman-server/structs.h'
1227--- libgearman-server/structs.h 2009-09-24 23:43:15 +0000
1228+++ libgearman-server/structs.h 2009-11-04 22:14:14 +0000
1229@@ -8,7 +8,7 @@
1230
1231 /**
1232 * @file
1233- * @brief Struct definitions
1234+ * @brief Struct Definitions
1235 */
1236
1237 #ifndef __GEARMAN_SERVER_STRUCTS_H__
1238@@ -29,6 +29,7 @@
1239 bool proc_wakeup;
1240 bool proc_shutdown;
1241 uint8_t job_retries;
1242+ uint8_t worker_wakeup;
1243 uint32_t job_handle_count;
1244 uint32_t thread_count;
1245 uint32_t function_count;
1246
1247=== modified file 'libgearman-server/thread.c'
1248--- libgearman-server/thread.c 2009-09-24 23:43:15 +0000
1249+++ libgearman-server/thread.c 2009-11-04 22:14:14 +0000
1250@@ -227,7 +227,7 @@
1251 }
1252
1253 /* Check for new activity on connections. */
1254- while ((con= gearman_con_ready(thread->gearman)) != NULL)
1255+ while ((con= gearman_ready(thread->gearman)) != NULL)
1256 {
1257 /* Inherited classes anyone? Some people would call this a hack, I call
1258 it clean (avoids extra ptrs). Brian, I'll give you your C99 0-byte
1259
1260=== modified file 'libgearman-server/thread.h'
1261--- libgearman-server/thread.h 2009-09-24 23:43:15 +0000
1262+++ libgearman-server/thread.h 2009-11-04 22:14:14 +0000
1263@@ -8,7 +8,7 @@
1264
1265 /**
1266 * @file
1267- * @brief Server Thread Declarations
1268+ * @brief Thread Declarations
1269 */
1270
1271 #ifndef __GEARMAN_SERVER_THREAD_H__
1272@@ -19,8 +19,11 @@
1273 #endif
1274
1275 /**
1276- * @addtogroup gearman_server_thread Server Thread Handling
1277+ * @addtogroup gearman_server_thread Thread Declarations
1278+ * @ingroup gearman_server
1279+ *
1280 * This is the interface gearman servers should use for creating threads.
1281+ *
1282 * @{
1283 */
1284
1285
1286=== modified file 'libgearman-server/worker.c'
1287--- libgearman-server/worker.c 2009-09-24 23:43:15 +0000
1288+++ libgearman-server/worker.c 2009-11-04 22:14:14 +0000
1289@@ -73,7 +73,23 @@
1290 worker->con= con;
1291 GEARMAN_LIST_ADD(con->worker, worker, con_)
1292 worker->function= function;
1293- GEARMAN_LIST_ADD(function->worker, worker, function_)
1294+
1295+ /* Add worker to the function list, which is a double-linked circular list. */
1296+ if (function->worker_list == NULL)
1297+ {
1298+ function->worker_list= worker;
1299+ worker->function_next= worker;
1300+ worker->function_prev= worker;
1301+ }
1302+ else
1303+ {
1304+ worker->function_next= function->worker_list;
1305+ worker->function_prev= function->worker_list->function_prev;
1306+ worker->function_next->function_prev= worker;
1307+ worker->function_prev->function_next= worker;
1308+ }
1309+ function->worker_count++;
1310+
1311 worker->job_list= NULL;
1312
1313 return worker;
1314@@ -88,7 +104,17 @@
1315 (void)gearman_server_job_queue(worker->job_list);
1316
1317 GEARMAN_LIST_DEL(worker->con->worker, worker, con_)
1318- GEARMAN_LIST_DEL(worker->function->worker, worker, function_)
1319+
1320+ if (worker == worker->function_next)
1321+ worker->function->worker_list= NULL;
1322+ else
1323+ {
1324+ worker->function_next->function_prev= worker->function_prev;
1325+ worker->function_prev->function_next= worker->function_next;
1326+ if (worker == worker->function->worker_list)
1327+ worker->function->worker_list= worker->function_next;
1328+ }
1329+ worker->function->worker_count--;
1330
1331 if (worker->options & GEARMAN_SERVER_WORKER_ALLOCATED)
1332 {
1333
1334=== modified file 'libgearman-server/worker.h'
1335--- libgearman-server/worker.h 2009-09-24 23:43:15 +0000
1336+++ libgearman-server/worker.h 2009-11-04 22:14:14 +0000
1337@@ -8,7 +8,7 @@
1338
1339 /**
1340 * @file
1341- * @brief Server worker declarations
1342+ * @brief Worker Declarations
1343 */
1344
1345 #ifndef __GEARMAN_SERVER_WORKER_H__
1346@@ -19,10 +19,12 @@
1347 #endif
1348
1349 /**
1350- * @addtogroup gearman_server_worker Server Worker Handling
1351+ * @addtogroup gearman_server_worker Worker Declarations
1352 * @ingroup gearman_server
1353+ *
1354 * This is a low level interface for gearman server workers. This is used
1355 * internally by the server interface, so you probably want to look there first.
1356+ *
1357 * @{
1358 */
1359
1360
1361=== modified file 'libgearman/Makefile.am'
1362--- libgearman/Makefile.am 2009-09-26 16:54:44 +0000
1363+++ libgearman/Makefile.am 2009-11-04 22:14:14 +0000
1364@@ -22,7 +22,8 @@
1365 worker.h
1366
1367 noinst_HEADERS= \
1368- common.h
1369+ common.h \
1370+ gearman_local.h
1371
1372 libgearman_la_SOURCES= \
1373 client.c \
1374
1375=== modified file 'libgearman/client.c'
1376--- libgearman/client.c 2009-09-28 17:47:34 +0000
1377+++ libgearman/client.c 2009-11-04 22:14:14 +0000
1378@@ -8,17 +8,13 @@
1379
1380 /**
1381 * @file
1382- * @brief Client definitions
1383+ * @brief Client Definitions
1384 */
1385
1386 #include "common.h"
1387
1388-/*
1389- * Private declarations
1390- */
1391-
1392 /**
1393- * @addtogroup gearman_client_private Private Client Functions
1394+ * @addtogroup gearman_client_static Static Client Declarations
1395 * @ingroup gearman_client
1396 * @{
1397 */
1398@@ -102,7 +98,7 @@
1399 /** @} */
1400
1401 /*
1402- * Public definitions
1403+ * Public Definitions
1404 */
1405
1406 gearman_client_st *gearman_client_create(gearman_client_st *client)
1407@@ -251,7 +247,7 @@
1408 gearman_return_t gearman_client_add_server(gearman_client_st *client,
1409 const char *host, in_port_t port)
1410 {
1411- if (gearman_con_add(client->gearman, NULL, host, port) == NULL)
1412+ if (gearman_add_con_args(client->gearman, NULL, host, port) == NULL)
1413 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
1414
1415 return GEARMAN_SUCCESS;
1416@@ -265,12 +261,12 @@
1417
1418 void gearman_client_remove_servers(gearman_client_st *client)
1419 {
1420- gearman_con_free_all(client->gearman);
1421+ gearman_free_all_cons(client->gearman);
1422 }
1423
1424 gearman_return_t gearman_client_wait(gearman_client_st *client)
1425 {
1426- return gearman_con_wait(client->gearman);
1427+ return gearman_wait(client->gearman);
1428 }
1429
1430 void *gearman_client_do(gearman_client_st *client, const char *function_name,
1431@@ -394,7 +390,7 @@
1432 const void *workload,
1433 size_t workload_size)
1434 {
1435- return gearman_con_echo(client->gearman, workload, workload_size);
1436+ return gearman_echo(client->gearman, workload, workload_size);
1437 }
1438
1439 void gearman_task_free(gearman_task_st *task)
1440@@ -402,8 +398,11 @@
1441 if (task->options & GEARMAN_TASK_SEND_IN_USE)
1442 gearman_packet_free(&(task->send));
1443
1444- if (task->context != NULL && task->client->task_context_free_fn != NULL)
1445- (*(task->client->task_context_free_fn))(task, (void *)(task->context));
1446+ if (task != &(task->client->do_task) && task->context != NULL &&
1447+ task->client->task_context_free_fn != NULL)
1448+ {
1449+ task->client->task_context_free_fn(task, (void *)task->context);
1450+ }
1451
1452 if (task->client->task_list == task)
1453 task->client->task_list= task->next;
1454@@ -521,6 +520,9 @@
1455 const char *job_handle,
1456 gearman_return_t *ret_ptr)
1457 {
1458+ const void *args[1];
1459+ size_t args_size[1];
1460+
1461 task= _task_create(client, task);
1462 if (task == NULL)
1463 {
1464@@ -531,10 +533,12 @@
1465 task->context= context;
1466 snprintf(task->job_handle, GEARMAN_JOB_HANDLE_SIZE, "%s", job_handle);
1467
1468- *ret_ptr= gearman_packet_add(client->gearman, &(task->send),
1469- GEARMAN_MAGIC_REQUEST,
1470- GEARMAN_COMMAND_GET_STATUS,
1471- (uint8_t *)job_handle, strlen(job_handle), NULL);
1472+ args[0]= job_handle;
1473+ args_size[0]= strlen(job_handle);
1474+ *ret_ptr= gearman_add_packet_args(client->gearman, &(task->send),
1475+ GEARMAN_MAGIC_REQUEST,
1476+ GEARMAN_COMMAND_GET_STATUS,
1477+ args, args_size, 1);
1478 if (*ret_ptr == GEARMAN_SUCCESS)
1479 {
1480 client->new_tasks++;
1481@@ -636,10 +640,20 @@
1482 return ret;
1483 }
1484 }
1485+
1486+ if (client->new_tasks == 0)
1487+ {
1488+ ret= gearman_flush_all(client->gearman);
1489+ if (ret != GEARMAN_SUCCESS)
1490+ {
1491+ client->gearman->options= options;
1492+ return ret;
1493+ }
1494+ }
1495 }
1496
1497 /* See if there are any connections ready for I/O. */
1498- while ((client->con= gearman_con_ready(client->gearman)) != NULL)
1499+ while ((client->con= gearman_ready(client->gearman)) != NULL)
1500 {
1501 if (client->con->revents & (POLLOUT | POLLERR | POLLHUP | POLLNVAL))
1502 {
1503@@ -738,7 +752,7 @@
1504 }
1505 else if (client->con->packet.command == GEARMAN_COMMAND_ERROR)
1506 {
1507- gearman_error_set(client->gearman, "gearman_client_run_tasks",
1508+ gearman_set_error(client->gearman, "gearman_client_run_tasks",
1509 "%s:%.*s",
1510 (char *)(client->con->packet.arg[0]),
1511 (int)(client->con->packet.arg_size[1]),
1512@@ -800,7 +814,7 @@
1513 }
1514
1515 /* Wait for activity on one of the connections. */
1516- ret= gearman_con_wait(client->gearman);
1517+ ret= gearman_wait(client->gearman);
1518 if (ret != GEARMAN_SUCCESS && ret != GEARMAN_IO_WAIT)
1519 {
1520 client->state= GEARMAN_CLIENT_STATE_IDLE;
1521@@ -812,7 +826,7 @@
1522 break;
1523
1524 default:
1525- gearman_error_set(client->gearman, "gearman_client_run_tasks",
1526+ gearman_set_error(client->gearman, "gearman_client_run_tasks",
1527 "unknown state: %u", client->state);
1528 client->gearman->options= options;
1529 return GEARMAN_UNKNOWN_STATE;
1530@@ -824,7 +838,7 @@
1531 }
1532
1533 /*
1534- * Private definitions
1535+ * Static Definitions
1536 */
1537
1538 static gearman_client_st *_client_allocate(gearman_client_st *client)
1539@@ -883,6 +897,8 @@
1540 {
1541 uuid_t uuid;
1542 char uuid_string[37];
1543+ const void *args[3];
1544+ size_t args_size[3];
1545
1546 task= _task_create(client, task);
1547 if (task == NULL)
1548@@ -900,12 +916,16 @@
1549 unique= uuid_string;
1550 }
1551
1552- *ret_ptr= gearman_packet_add(client->gearman, &(task->send),
1553- GEARMAN_MAGIC_REQUEST, command,
1554- (uint8_t *)function_name,
1555- (size_t)(strlen(function_name) + 1),
1556- (uint8_t *)unique, (size_t)(strlen(unique) + 1),
1557- workload, workload_size, NULL);
1558+ args[0]= function_name;
1559+ args_size[0]= (size_t)strlen(function_name) + 1;
1560+ args[1]= unique;
1561+ args_size[1]= (size_t)strlen(unique) + 1;
1562+ args[2]= workload;
1563+ args_size[2]= workload_size;
1564+
1565+ *ret_ptr= gearman_add_packet_args(client->gearman, &(task->send),
1566+ GEARMAN_MAGIC_REQUEST, command,
1567+ args, args_size, 3);
1568 if (*ret_ptr == GEARMAN_SUCCESS)
1569 {
1570 client->new_tasks++;
1571@@ -930,7 +950,8 @@
1572 {
1573 client->new_tasks--;
1574 client->running_tasks--;
1575- gearman_error_set(client->gearman, "_client_run_task", "no servers added");
1576+ gearman_set_error(client->gearman, "_client_run_task",
1577+ "no servers added");
1578 return GEARMAN_NO_SERVERS;
1579 }
1580
1581@@ -981,6 +1002,8 @@
1582 break;
1583 }
1584 }
1585+ else
1586+ task->con= NULL;
1587
1588 if (task->con == NULL)
1589 {
1590@@ -1000,13 +1023,13 @@
1591 {
1592 if (client->workload_fn == NULL)
1593 {
1594- gearman_error_set(client->gearman, "_client_run_task",
1595- "workload size > 0, but no data pointer or workload_fn was given");
1596+ gearman_set_error(client->gearman, "_client_run_task",
1597+ "workload size > 0, but no data pointer or workload_fn was given");
1598 return GEARMAN_NEED_WORKLOAD_FN;
1599 }
1600
1601 case GEARMAN_TASK_STATE_WORKLOAD:
1602- ret= (*(client->workload_fn))(task);
1603+ ret= client->workload_fn(task);
1604 if (ret != GEARMAN_SUCCESS)
1605 {
1606 task->state= GEARMAN_TASK_STATE_WORKLOAD;
1607@@ -1028,7 +1051,7 @@
1608 case GEARMAN_TASK_STATE_CREATED:
1609 if (client->created_fn != NULL)
1610 {
1611- ret= (*(client->created_fn))(task);
1612+ ret= client->created_fn(task);
1613 if (ret != GEARMAN_SUCCESS)
1614 {
1615 task->state= GEARMAN_TASK_STATE_CREATED;
1616@@ -1048,7 +1071,7 @@
1617 case GEARMAN_TASK_STATE_DATA:
1618 if (client->data_fn != NULL)
1619 {
1620- ret= (*(client->data_fn))(task);
1621+ ret= client->data_fn(task);
1622 if (ret != GEARMAN_SUCCESS)
1623 {
1624 task->state= GEARMAN_TASK_STATE_DATA;
1625@@ -1061,7 +1084,7 @@
1626 case GEARMAN_TASK_STATE_WARNING:
1627 if (client->warning_fn != NULL)
1628 {
1629- ret= (*(client->warning_fn))(task);
1630+ ret= client->warning_fn(task);
1631 if (ret != GEARMAN_SUCCESS)
1632 {
1633 task->state= GEARMAN_TASK_STATE_WARNING;
1634@@ -1098,7 +1121,7 @@
1635 case GEARMAN_TASK_STATE_STATUS:
1636 if (client->status_fn != NULL)
1637 {
1638- ret= (*(client->status_fn))(task);
1639+ ret= client->status_fn(task);
1640 if (ret != GEARMAN_SUCCESS)
1641 {
1642 task->state= GEARMAN_TASK_STATE_STATUS;
1643@@ -1114,7 +1137,7 @@
1644 case GEARMAN_TASK_STATE_COMPLETE:
1645 if (client->complete_fn != NULL)
1646 {
1647- ret= (*(client->complete_fn))(task);
1648+ ret= client->complete_fn(task);
1649 if (ret != GEARMAN_SUCCESS)
1650 {
1651 task->state= GEARMAN_TASK_STATE_COMPLETE;
1652@@ -1129,7 +1152,7 @@
1653 case GEARMAN_TASK_STATE_EXCEPTION:
1654 if (client->exception_fn != NULL)
1655 {
1656- ret= (*(client->exception_fn))(task);
1657+ ret= client->exception_fn(task);
1658 if (ret != GEARMAN_SUCCESS)
1659 {
1660 task->state= GEARMAN_TASK_STATE_EXCEPTION;
1661@@ -1142,7 +1165,7 @@
1662 case GEARMAN_TASK_STATE_FAIL:
1663 if (client->fail_fn != NULL)
1664 {
1665- ret= (*(client->fail_fn))(task);
1666+ ret= client->fail_fn(task);
1667 if (ret != GEARMAN_SUCCESS)
1668 {
1669 task->state= GEARMAN_TASK_STATE_FAIL;
1670@@ -1160,7 +1183,7 @@
1671 break;
1672
1673 default:
1674- gearman_error_set(client->gearman, "_client_run_task", "unknown state: %u",
1675+ gearman_set_error(client->gearman, "_client_run_task", "unknown state: %u",
1676 task->state);
1677 return GEARMAN_UNKNOWN_STATE;
1678 }
1679@@ -1311,7 +1334,7 @@
1680 task= malloc(sizeof(gearman_task_st));
1681 if (task == NULL)
1682 {
1683- gearman_error_set(client->gearman, "_task_create", "malloc");
1684+ gearman_set_error(client->gearman, "_task_create", "malloc");
1685 return NULL;
1686 }
1687
1688
1689=== modified file 'libgearman/client.h'
1690--- libgearman/client.h 2009-10-02 01:13:31 +0000
1691+++ libgearman/client.h 2009-11-04 22:14:14 +0000
1692@@ -8,7 +8,7 @@
1693
1694 /**
1695 * @file
1696- * @brief Client declarations
1697+ * @brief Client Declarations
1698 */
1699
1700 #ifndef __GEARMAN_CLIENT_H__
1701@@ -19,7 +19,8 @@
1702 #endif
1703
1704 /**
1705- * @addtogroup gearman_client Client Interface
1706+ * @addtogroup gearman_client Client Declarations
1707+ *
1708 * This is the interface gearman clients should use. You can run tasks one at a
1709 * time or concurrently.
1710 *
1711@@ -227,6 +228,8 @@
1712 GEARMAN_API
1713 gearman_return_t gearman_client_wait(gearman_client_st *client);
1714
1715+/** @} */
1716+
1717 /**
1718 * @addtogroup gearman_client_single Single Task Interface
1719 * @ingroup gearman_client
1720@@ -654,8 +657,6 @@
1721
1722 /** @} */
1723
1724-/** @} */
1725-
1726 #ifdef __cplusplus
1727 }
1728 #endif
1729
1730=== modified file 'libgearman/common.h'
1731--- libgearman/common.h 2009-09-26 16:54:44 +0000
1732+++ libgearman/common.h 2009-11-04 22:14:14 +0000
1733@@ -8,7 +8,7 @@
1734
1735 /**
1736 * @file
1737- * @brief System include files
1738+ * @brief System Include Files
1739 */
1740
1741 #ifndef __GEARMAN_COMMON_H__
1742@@ -75,34 +75,6 @@
1743 # endif
1744 #endif
1745
1746-#ifdef __cplusplus
1747-extern "C" {
1748-#endif
1749-
1750-/**
1751- * Utility function used for error logging
1752- * @ingroup gearman_private
1753- *
1754- * @param[in] gearman Structure previously initialized with gearman_create() or
1755- * gearman_clone().
1756- * @param[in] function Name of function the error happened in.
1757- * @param[in] format Format and variable argument list of message.
1758- */
1759-GEARMAN_LOCAL
1760-void gearman_error_set(gearman_st *gearman, const char *function,
1761- const char *format, ...);
1762-
1763-/**
1764- * Utility function used for parsing server lists.
1765- * @ingroup gearman_private
1766- */
1767-GEARMAN_LOCAL
1768-gearman_return_t gearman_parse_servers(const char *servers,
1769- gearman_parse_server_fn *callback,
1770- const void *context);
1771-
1772-#ifdef __cplusplus
1773-}
1774-#endif
1775+#include "gearman_local.h"
1776
1777 #endif /* __GEARMAN_COMMON_H__ */
1778
1779=== modified file 'libgearman/conn.c'
1780--- libgearman/conn.c 2009-09-28 17:47:34 +0000
1781+++ libgearman/conn.c 2009-11-04 22:14:14 +0000
1782@@ -8,17 +8,13 @@
1783
1784 /**
1785 * @file
1786- * @brief Connection definitions
1787+ * @brief Connection Definitions
1788 */
1789
1790 #include "common.h"
1791
1792-/*
1793- * Private declarations
1794- */
1795-
1796 /**
1797- * @addtogroup gearman_con_private Private Connection Functions
1798+ * @addtogroup gearman_con_static Static Connection Declarations
1799 * @ingroup gearman_con
1800 * @{
1801 */
1802@@ -31,7 +27,7 @@
1803 /** @} */
1804
1805 /*
1806- * Public definitions
1807+ * Public Definitions
1808 */
1809
1810 void gearman_con_set_host(gearman_con_st *con, const char *host)
1811@@ -156,19 +152,18 @@
1812 case GEARMAN_CON_SEND_STATE_NONE:
1813 if (!(packet->options & GEARMAN_PACKET_COMPLETE))
1814 {
1815- gearman_error_set(con->gearman, "gearman_con_send", "packet not complete");
1816+ gearman_set_error(con->gearman, "gearman_con_send",
1817+ "packet not complete");
1818 return GEARMAN_INVALID_PACKET;
1819 }
1820
1821 /* Pack first part of packet, which is everything but the payload. */
1822 while (1)
1823 {
1824- send_size= (*con->packet_pack_fn)(packet, con,
1825- con->send_buffer +
1826- con->send_buffer_size,
1827- GEARMAN_SEND_BUFFER_SIZE -
1828- con->send_buffer_size,
1829- &ret);
1830+ send_size= con->packet_pack_fn(packet, con,
1831+ con->send_buffer + con->send_buffer_size,
1832+ GEARMAN_SEND_BUFFER_SIZE -
1833+ con->send_buffer_size, &ret);
1834 if (ret == GEARMAN_SUCCESS)
1835 {
1836 con->send_buffer_size+= send_size;
1837@@ -182,7 +177,7 @@
1838 /* We were asked to flush when the buffer is already flushed! */
1839 if (con->send_buffer_size == 0)
1840 {
1841- gearman_error_set(con->gearman, "gearman_con_send",
1842+ gearman_set_error(con->gearman, "gearman_con_send",
1843 "send buffer too small (%u)",
1844 GEARMAN_SEND_BUFFER_SIZE);
1845 return GEARMAN_SEND_BUFFER_TOO_SMALL;
1846@@ -264,7 +259,7 @@
1847 return ret;
1848
1849 default:
1850- gearman_error_set(con->gearman, "gearman_con_send", "unknown state: %u",
1851+ gearman_set_error(con->gearman, "gearman_con_send", "unknown state: %u",
1852 con->send_state);
1853 return GEARMAN_UNKNOWN_STATE;
1854 }
1855@@ -290,13 +285,13 @@
1856 {
1857 if (con->send_state != GEARMAN_CON_SEND_STATE_FLUSH_DATA)
1858 {
1859- gearman_error_set(con->gearman, "gearman_con_send_data", "not flushing");
1860+ gearman_set_error(con->gearman, "gearman_con_send_data", "not flushing");
1861 return GEARMAN_NOT_FLUSHING;
1862 }
1863
1864 if (data_size > (con->send_data_size - con->send_data_offset))
1865 {
1866- gearman_error_set(con->gearman, "gearman_con_send_data", "data too large");
1867+ gearman_set_error(con->gearman, "gearman_con_send_data", "data too large");
1868 return GEARMAN_DATA_TOO_LARGE;
1869 }
1870
1871@@ -336,7 +331,7 @@
1872 ret= getaddrinfo(con->host, port_str, &ai, &(con->addrinfo));
1873 if (ret != 0)
1874 {
1875- gearman_error_set(con->gearman, "gearman_con_flush", "getaddrinfo:%s",
1876+ gearman_set_error(con->gearman, "gearman_con_flush", "getaddrinfo:%s",
1877 gai_strerror(ret));
1878 return GEARMAN_GETADDRINFO;
1879 }
1880@@ -350,7 +345,7 @@
1881 if (con->addrinfo_next == NULL)
1882 {
1883 con->state= GEARMAN_CON_STATE_ADDRINFO;
1884- gearman_error_set(con->gearman, "gearman_con_flush",
1885+ gearman_set_error(con->gearman, "gearman_con_flush",
1886 "could not connect");
1887 return GEARMAN_COULD_NOT_CONNECT;
1888 }
1889@@ -361,7 +356,8 @@
1890 if (con->fd == -1)
1891 {
1892 con->state= GEARMAN_CON_STATE_ADDRINFO;
1893- gearman_error_set(con->gearman, "gearman_con_flush", "socket:%d", errno);
1894+ gearman_set_error(con->gearman, "gearman_con_flush", "socket:%d",
1895+ errno);
1896 con->gearman->last_errno= errno;
1897 return GEARMAN_ERRNO;
1898 }
1899@@ -401,7 +397,8 @@
1900 break;
1901 }
1902
1903- gearman_error_set(con->gearman, "gearman_con_flush", "connect:%d", errno);
1904+ gearman_set_error(con->gearman, "gearman_con_flush", "connect:%d",
1905+ errno);
1906 con->gearman->last_errno= errno;
1907 gearman_con_close(con);
1908 return GEARMAN_ERRNO;
1909@@ -435,7 +432,7 @@
1910 return GEARMAN_IO_WAIT;
1911 }
1912
1913- gret= gearman_con_wait(con->gearman);
1914+ gret= gearman_wait(con->gearman);
1915 if (gret != GEARMAN_SUCCESS)
1916 return gret;
1917 }
1918@@ -451,7 +448,7 @@
1919 {
1920 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
1921 {
1922- gearman_error_set(con->gearman, "gearman_con_flush",
1923+ gearman_set_error(con->gearman, "gearman_con_flush",
1924 "lost connection to server (EOF)");
1925 }
1926 gearman_con_close(con);
1927@@ -468,7 +465,7 @@
1928 if (con->gearman->options & GEARMAN_NON_BLOCKING)
1929 return GEARMAN_IO_WAIT;
1930
1931- gret= gearman_con_wait(con->gearman);
1932+ gret= gearman_wait(con->gearman);
1933 if (gret != GEARMAN_SUCCESS)
1934 return gret;
1935
1936@@ -480,14 +477,15 @@
1937 {
1938 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
1939 {
1940- gearman_error_set(con->gearman, "gearman_con_flush",
1941+ gearman_set_error(con->gearman, "gearman_con_flush",
1942 "lost connection to server (%d)", errno);
1943 }
1944 gearman_con_close(con);
1945 return GEARMAN_LOST_CONNECTION;
1946 }
1947
1948- gearman_error_set(con->gearman, "gearman_con_flush", "write:%d", errno);
1949+ gearman_set_error(con->gearman, "gearman_con_flush", "write:%d",
1950+ errno);
1951 con->gearman->last_errno= errno;
1952 gearman_con_close(con);
1953 return GEARMAN_ERRNO;
1954@@ -518,7 +516,8 @@
1955 return GEARMAN_SUCCESS;
1956
1957 default:
1958- gearman_error_set(con->gearman, "gearman_con_flush", "unknown state: %u", con->state);
1959+ gearman_set_error(con->gearman, "gearman_con_flush", "unknown state: %u",
1960+ con->state);
1961
1962 return GEARMAN_UNKNOWN_STATE;
1963 }
1964@@ -536,12 +535,12 @@
1965 case GEARMAN_CON_RECV_STATE_NONE:
1966 if (con->state != GEARMAN_CON_STATE_CONNECTED)
1967 {
1968- gearman_error_set(con->gearman, "gearman_con_recv", "not connected");
1969+ gearman_set_error(con->gearman, "gearman_con_recv", "not connected");
1970 *ret_ptr= GEARMAN_NOT_CONNECTED;
1971 return NULL;
1972 }
1973
1974- con->recv_packet= gearman_packet_create(con->gearman, packet);
1975+ con->recv_packet= gearman_add_packet(con->gearman, packet);
1976 if (con->recv_packet == NULL)
1977 {
1978 *ret_ptr= GEARMAN_MEMORY_ALLOCATION_FAILURE;
1979@@ -555,9 +554,9 @@
1980 {
1981 if (con->recv_buffer_size > 0)
1982 {
1983- recv_size= (*con->packet_unpack_fn)(con->recv_packet, con,
1984- con->recv_buffer_ptr,
1985- con->recv_buffer_size, ret_ptr);
1986+ recv_size= con->packet_unpack_fn(con->recv_packet, con,
1987+ con->recv_buffer_ptr,
1988+ con->recv_buffer_size, ret_ptr);
1989 con->recv_buffer_ptr+= recv_size;
1990 con->recv_buffer_size-= recv_size;
1991 if (*ret_ptr == GEARMAN_SUCCESS)
1992@@ -602,7 +601,7 @@
1993 else
1994 {
1995 packet->data= packet->gearman->workload_malloc_fn(packet->data_size,
1996- (void *)(packet->gearman->workload_malloc_context));
1997+ (void *)packet->gearman->workload_malloc_context);
1998 }
1999 if (packet->data == NULL)
2000 {
2001@@ -630,7 +629,7 @@
2002 break;
2003
2004 default:
2005- gearman_error_set(con->gearman, "gearman_con_recv", "unknown state: %u",
2006+ gearman_set_error(con->gearman, "gearman_con_recv", "unknown state: %u",
2007 con->recv_state);
2008 *ret_ptr= GEARMAN_UNKNOWN_STATE;
2009 return NULL;
2010@@ -702,7 +701,7 @@
2011 {
2012 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
2013 {
2014- gearman_error_set(con->gearman, "gearman_con_read",
2015+ gearman_set_error(con->gearman, "gearman_con_read",
2016 "lost connection to server (EOF)");
2017 }
2018 gearman_con_close(con);
2019@@ -723,7 +722,7 @@
2020 return 0;
2021 }
2022
2023- *ret_ptr= gearman_con_wait(con->gearman);
2024+ *ret_ptr= gearman_wait(con->gearman);
2025 if (*ret_ptr != GEARMAN_SUCCESS)
2026 return 0;
2027
2028@@ -735,14 +734,14 @@
2029 {
2030 if (!(con->options & GEARMAN_CON_IGNORE_LOST_CONNECTION))
2031 {
2032- gearman_error_set(con->gearman, "gearman_con_read",
2033+ gearman_set_error(con->gearman, "gearman_con_read",
2034 "lost connection to server (%d)", errno);
2035 }
2036 *ret_ptr= GEARMAN_LOST_CONNECTION;
2037 }
2038 else
2039 {
2040- gearman_error_set(con->gearman, "gearman_con_read", "read:%d", errno);
2041+ gearman_set_error(con->gearman, "gearman_con_read", "read:%d", errno);
2042 con->gearman->last_errno= errno;
2043 *ret_ptr= GEARMAN_ERRNO;
2044 }
2045@@ -769,7 +768,7 @@
2046
2047 if (con->gearman->event_watch_fn != NULL)
2048 {
2049- ret= (con->gearman->event_watch_fn)(con, con->events,
2050+ ret= con->gearman->event_watch_fn(con, con->events,
2051 (void *)con->gearman->event_watch_context);
2052 if (ret != GEARMAN_SUCCESS)
2053 {
2054@@ -797,7 +796,7 @@
2055 if (revents & POLLOUT && !(con->events & POLLOUT) &&
2056 con->gearman->event_watch_fn != NULL)
2057 {
2058- ret= (con->gearman->event_watch_fn)(con, con->events,
2059+ ret= con->gearman->event_watch_fn(con, con->events,
2060 (void *)con->gearman->event_watch_context);
2061 if (ret != GEARMAN_SUCCESS)
2062 {
2063@@ -840,7 +839,7 @@
2064 }
2065
2066 /*
2067- * Private definitions
2068+ * Static Definitions
2069 */
2070
2071 static gearman_return_t _con_setsockopt(gearman_con_st *con)
2072@@ -852,9 +851,9 @@
2073 ret= 1;
2074 ret= setsockopt(con->fd, IPPROTO_TCP, TCP_NODELAY, &ret,
2075 (socklen_t)sizeof(int));
2076- if (ret == -1)
2077+ if (ret == -1 && errno != EOPNOTSUPP)
2078 {
2079- gearman_error_set(con->gearman, "_con_setsockopt",
2080+ gearman_set_error(con->gearman, "_con_setsockopt",
2081 "setsockopt:TCP_NODELAY:%d", errno);
2082 return GEARMAN_ERRNO;
2083 }
2084@@ -865,7 +864,7 @@
2085 (socklen_t)sizeof(struct linger));
2086 if (ret == -1)
2087 {
2088- gearman_error_set(con->gearman, "_con_setsockopt",
2089+ gearman_set_error(con->gearman, "_con_setsockopt",
2090 "setsockopt:SO_LINGER:%d", errno);
2091 return GEARMAN_ERRNO;
2092 }
2093@@ -876,7 +875,7 @@
2094 (socklen_t)sizeof(struct timeval));
2095 if (ret == -1 && errno != ENOPROTOOPT)
2096 {
2097- gearman_error_set(con->gearman, "_con_setsockopt",
2098+ gearman_set_error(con->gearman, "_con_setsockopt",
2099 "setsockopt:SO_SNDTIMEO:%d", errno);
2100 return GEARMAN_ERRNO;
2101 }
2102@@ -885,7 +884,7 @@
2103 (socklen_t)sizeof(struct timeval));
2104 if (ret == -1 && errno != ENOPROTOOPT)
2105 {
2106- gearman_error_set(con->gearman, "_con_setsockopt",
2107+ gearman_set_error(con->gearman, "_con_setsockopt",
2108 "setsockopt:SO_RCVTIMEO:%d", errno);
2109 return GEARMAN_ERRNO;
2110 }
2111@@ -894,7 +893,7 @@
2112 ret= setsockopt(con->fd, SOL_SOCKET, SO_SNDBUF, &ret, (socklen_t)sizeof(int));
2113 if (ret == -1)
2114 {
2115- gearman_error_set(con->gearman, "_con_setsockopt",
2116+ gearman_set_error(con->gearman, "_con_setsockopt",
2117 "setsockopt:SO_SNDBUF:%d", errno);
2118 return GEARMAN_ERRNO;
2119 }
2120@@ -903,7 +902,7 @@
2121 ret= setsockopt(con->fd, SOL_SOCKET, SO_RCVBUF, &ret, (socklen_t)sizeof(int));
2122 if (ret == -1)
2123 {
2124- gearman_error_set(con->gearman, "_con_setsockopt",
2125+ gearman_set_error(con->gearman, "_con_setsockopt",
2126 "setsockopt:SO_RCVBUF:%d", errno);
2127 return GEARMAN_ERRNO;
2128 }
2129@@ -911,16 +910,16 @@
2130 ret= fcntl(con->fd, F_GETFL, 0);
2131 if (ret == -1)
2132 {
2133- gearman_error_set(con->gearman, "_con_setsockopt", "fcntl:F_GETFL:%d", errno);
2134-
2135+ gearman_set_error(con->gearman, "_con_setsockopt", "fcntl:F_GETFL:%d",
2136+ errno);
2137 return GEARMAN_ERRNO;
2138 }
2139
2140 ret= fcntl(con->fd, F_SETFL, ret | O_NONBLOCK);
2141 if (ret == -1)
2142 {
2143- gearman_error_set(con->gearman, "_con_setsockopt", "fcntl:F_SETFL:%d", errno);
2144-
2145+ gearman_set_error(con->gearman, "_con_setsockopt", "fcntl:F_SETFL:%d",
2146+ errno);
2147 return GEARMAN_ERRNO;
2148 }
2149
2150
2151=== modified file 'libgearman/conn.h'
2152--- libgearman/conn.h 2009-09-24 23:43:15 +0000
2153+++ libgearman/conn.h 2009-11-04 22:14:14 +0000
2154@@ -8,7 +8,7 @@
2155
2156 /**
2157 * @file
2158- * @brief Connection declarations
2159+ * @brief Connection Declarations
2160 */
2161
2162 #ifndef __GEARMAN_CON_H__
2163@@ -19,11 +19,14 @@
2164 #endif
2165
2166 /**
2167- * @addtogroup gearman_con Connection Handling
2168+ * @addtogroup gearman_con Connection Declarations
2169+ * @ingroup gearman
2170+ *
2171 * This is a low level interface for gearman connections. This is used
2172 * internally by both client and worker interfaces, so you probably want to
2173 * look there first. This is usually used to write lower level clients, workers,
2174 * proxies, or your own server.
2175+ *
2176 * @{
2177 */
2178
2179
2180=== modified file 'libgearman/constants.h'
2181--- libgearman/constants.h 2009-09-28 17:47:34 +0000
2182+++ libgearman/constants.h 2009-11-04 22:14:14 +0000
2183@@ -19,7 +19,10 @@
2184 #endif
2185
2186 /**
2187- * @addtogroup gearman_constants Gearman Constants
2188+ * @addtogroup gearman_constants Constants
2189+ * @ingroup gearman
2190+ * @ingroup gearman_client
2191+ * @ingroup gearman_worker
2192 * @{
2193 */
2194
2195@@ -40,17 +43,6 @@
2196 #define GEARMAN_RECV_BUFFER_SIZE 8192
2197 #define GEARMAN_WORKER_WAIT_TIMEOUT (10 * 1000) /* Milliseconds */
2198
2199-/* Types. */
2200-typedef struct gearman_st gearman_st;
2201-typedef struct gearman_con_st gearman_con_st;
2202-typedef struct gearman_packet_st gearman_packet_st;
2203-typedef struct gearman_command_info_st gearman_command_info_st;
2204-typedef struct gearman_task_st gearman_task_st;
2205-typedef struct gearman_client_st gearman_client_st;
2206-typedef struct gearman_job_st gearman_job_st;
2207-typedef struct gearman_worker_st gearman_worker_st;
2208-typedef struct gearman_worker_function_st gearman_worker_function_st;
2209-
2210 /**
2211 * Return codes.
2212 */
2213@@ -111,6 +103,7 @@
2214 */
2215 typedef enum
2216 {
2217+ GEARMAN_VERBOSE_NEVER,
2218 GEARMAN_VERBOSE_FATAL,
2219 GEARMAN_VERBOSE_ERROR,
2220 GEARMAN_VERBOSE_INFO,
2221@@ -386,10 +379,24 @@
2222 } gearman_worker_work_state_t;
2223
2224 /**
2225- * @addtogroup gearman_constants Gearman Constants
2226+ * @addtogroup gearman_types Types
2227+ * @ingroup gearman
2228+ * @ingroup gearman_client
2229+ * @ingroup gearman_worker
2230 * @{
2231 */
2232
2233+/* Types. */
2234+typedef struct gearman_st gearman_st;
2235+typedef struct gearman_con_st gearman_con_st;
2236+typedef struct gearman_packet_st gearman_packet_st;
2237+typedef struct gearman_command_info_st gearman_command_info_st;
2238+typedef struct gearman_task_st gearman_task_st;
2239+typedef struct gearman_client_st gearman_client_st;
2240+typedef struct gearman_job_st gearman_job_st;
2241+typedef struct gearman_worker_st gearman_worker_st;
2242+typedef struct gearman_worker_function_st gearman_worker_function_st;
2243+
2244 /* Function types. */
2245 typedef gearman_return_t (gearman_workload_fn)(gearman_task_st *task);
2246 typedef gearman_return_t (gearman_created_fn)(gearman_task_st *task);
2247
2248=== modified file 'libgearman/gearman.c'
2249--- libgearman/gearman.c 2009-09-28 17:47:34 +0000
2250+++ libgearman/gearman.c 2009-11-04 22:14:14 +0000
2251@@ -8,17 +8,13 @@
2252
2253 /**
2254 * @file
2255- * @brief Gearman core definitions
2256+ * @brief Gearman Definitions
2257 */
2258
2259 #include "common.h"
2260
2261-/*
2262- * Private declarations
2263- */
2264-
2265 /**
2266- * @addtogroup gearman_private Private Functions
2267+ * @addtogroup gearman_static Static Gearman Declarations
2268 * @ingroup gearman
2269 * @{
2270 */
2271@@ -28,6 +24,7 @@
2272 */
2273 static const char *_verbose_name[GEARMAN_VERBOSE_MAX]=
2274 {
2275+ "NEVER",
2276 "FATAL",
2277 "ERROR",
2278 "INFO",
2279@@ -38,7 +35,7 @@
2280 /** @} */
2281
2282 /*
2283- * Public definitions
2284+ * Public Definitions
2285 */
2286
2287 const char *gearman_version(void)
2288@@ -108,7 +105,7 @@
2289
2290 for (con= from->con_list; con != NULL; con= con->next)
2291 {
2292- if (gearman_con_clone(gearman, NULL, con) == NULL)
2293+ if (gearman_clone_con(gearman, NULL, con) == NULL)
2294 {
2295 gearman_free(gearman);
2296 return NULL;
2297@@ -123,8 +120,8 @@
2298
2299 void gearman_free(gearman_st *gearman)
2300 {
2301- gearman_con_free_all(gearman);
2302- gearman_packet_free_all(gearman);
2303+ gearman_free_all_cons(gearman);
2304+ gearman_free_all_packets(gearman);
2305
2306 if (gearman->pfds != NULL)
2307 free(gearman->pfds);
2308@@ -209,14 +206,14 @@
2309 * Connection related functions.
2310 */
2311
2312-gearman_con_st *gearman_con_create(gearman_st *gearman, gearman_con_st *con)
2313+gearman_con_st *gearman_add_con(gearman_st *gearman, gearman_con_st *con)
2314 {
2315 if (con == NULL)
2316 {
2317 con= malloc(sizeof(gearman_con_st));
2318 if (con == NULL)
2319 {
2320- gearman_error_set(gearman, "gearman_con_create", "malloc");
2321+ gearman_set_error(gearman, "gearman_add_con", "malloc");
2322 return NULL;
2323 }
2324
2325@@ -264,10 +261,10 @@
2326 return con;
2327 }
2328
2329-gearman_con_st *gearman_con_add(gearman_st *gearman, gearman_con_st *con,
2330- const char *host, in_port_t port)
2331+gearman_con_st *gearman_add_con_args(gearman_st *gearman, gearman_con_st *con,
2332+ const char *host, in_port_t port)
2333 {
2334- con= gearman_con_create(gearman, con);
2335+ con= gearman_add_con(gearman, con);
2336 if (con == NULL)
2337 return NULL;
2338
2339@@ -277,10 +274,10 @@
2340 return con;
2341 }
2342
2343-gearman_con_st *gearman_con_clone(gearman_st *gearman, gearman_con_st *con,
2344+gearman_con_st *gearman_clone_con(gearman_st *gearman, gearman_con_st *con,
2345 const gearman_con_st *from)
2346 {
2347- con= gearman_con_create(gearman, con);
2348+ con= gearman_add_con(gearman, con);
2349 if (con == NULL)
2350 return NULL;
2351
2352@@ -300,7 +297,7 @@
2353 gearman_con_reset_addrinfo(con);
2354
2355 if (con->protocol_context != NULL && con->protocol_context_free_fn != NULL)
2356- (*con->protocol_context_free_fn)(con, (void *)con->protocol_context);
2357+ con->protocol_context_free_fn(con, (void *)con->protocol_context);
2358
2359 if (con->gearman->con_list == con)
2360 con->gearman->con_list= con->next;
2361@@ -317,13 +314,13 @@
2362 free(con);
2363 }
2364
2365-void gearman_con_free_all(gearman_st *gearman)
2366+void gearman_free_all_cons(gearman_st *gearman)
2367 {
2368 while (gearman->con_list != NULL)
2369 gearman_con_free(gearman->con_list);
2370 }
2371
2372-gearman_return_t gearman_con_flush_all(gearman_st *gearman)
2373+gearman_return_t gearman_flush_all(gearman_st *gearman)
2374 {
2375 gearman_con_st *con;
2376 gearman_return_t ret;
2377@@ -341,8 +338,8 @@
2378 return GEARMAN_SUCCESS;
2379 }
2380
2381-gearman_return_t gearman_con_send_all(gearman_st *gearman,
2382- const gearman_packet_st *packet)
2383+gearman_return_t gearman_send_all(gearman_st *gearman,
2384+ const gearman_packet_st *packet)
2385 {
2386 gearman_return_t ret;
2387 gearman_con_st *con;
2388@@ -371,7 +368,7 @@
2389
2390 while (gearman->sending != 0)
2391 {
2392- while ((con= gearman_con_ready(gearman)) != NULL)
2393+ while ((con= gearman_ready(gearman)) != NULL)
2394 {
2395 ret= gearman_con_send(con, packet, true);
2396 if (ret != GEARMAN_SUCCESS)
2397@@ -397,7 +394,7 @@
2398 return GEARMAN_IO_WAIT;
2399 }
2400
2401- ret= gearman_con_wait(gearman);
2402+ ret= gearman_wait(gearman);
2403 if (ret != GEARMAN_SUCCESS)
2404 {
2405 gearman->options= options;
2406@@ -409,7 +406,7 @@
2407 return GEARMAN_SUCCESS;
2408 }
2409
2410-gearman_return_t gearman_con_wait(gearman_st *gearman)
2411+gearman_return_t gearman_wait(gearman_st *gearman)
2412 {
2413 gearman_con_st *con;
2414 struct pollfd *pfds;
2415@@ -422,7 +419,7 @@
2416 pfds= realloc(gearman->pfds, gearman->con_count * sizeof(struct pollfd));
2417 if (pfds == NULL)
2418 {
2419- gearman_error_set(gearman, "gearman_con_wait", "realloc");
2420+ gearman_set_error(gearman, "gearman_wait", "realloc");
2421 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
2422 }
2423
2424@@ -446,8 +443,7 @@
2425
2426 if (x == 0)
2427 {
2428- gearman_error_set(gearman, "gearman_con_wait",
2429- "no active file descriptors");
2430+ gearman_set_error(gearman, "gearman_wait", "no active file descriptors");
2431 return GEARMAN_NO_ACTIVE_FDS;
2432 }
2433
2434@@ -459,7 +455,7 @@
2435 if (errno == EINTR)
2436 continue;
2437
2438- gearman_error_set(gearman, "gearman_con_wait", "poll:%d", errno);
2439+ gearman_set_error(gearman, "gearman_wait", "poll:%d", errno);
2440 gearman->last_errno= errno;
2441 return GEARMAN_ERRNO;
2442 }
2443@@ -469,7 +465,7 @@
2444
2445 if (ret == 0)
2446 {
2447- gearman_error_set(gearman, "gearman_con_wait", "timeout reached");
2448+ gearman_set_error(gearman, "gearman_wait", "timeout reached");
2449 return GEARMAN_TIMEOUT;
2450 }
2451
2452@@ -489,7 +485,7 @@
2453 return GEARMAN_SUCCESS;
2454 }
2455
2456-gearman_con_st *gearman_con_ready(gearman_st *gearman)
2457+gearman_con_st *gearman_ready(gearman_st *gearman)
2458 {
2459 gearman_con_st *con;
2460
2461@@ -508,17 +504,17 @@
2462 return NULL;
2463 }
2464
2465-gearman_return_t gearman_con_echo(gearman_st *gearman, const void *workload,
2466- size_t workload_size)
2467+gearman_return_t gearman_echo(gearman_st *gearman, const void *workload,
2468+ size_t workload_size)
2469 {
2470 gearman_con_st *con;
2471 gearman_options_t options= gearman->options;
2472 gearman_packet_st packet;
2473 gearman_return_t ret;
2474
2475- ret= gearman_packet_add(gearman, &packet, GEARMAN_MAGIC_REQUEST,
2476- GEARMAN_COMMAND_ECHO_REQ, workload, workload_size,
2477- NULL);
2478+ ret= gearman_add_packet_args(gearman, &packet, GEARMAN_MAGIC_REQUEST,
2479+ GEARMAN_COMMAND_ECHO_REQ, &workload,
2480+ &workload_size, 1);
2481 if (ret != GEARMAN_SUCCESS)
2482 return ret;
2483
2484@@ -548,7 +544,7 @@
2485 gearman_packet_free(&(con->packet));
2486 gearman_packet_free(&packet);
2487 gearman->options= options;
2488- gearman_error_set(gearman, "gearman_con_echo", "corruption during echo");
2489+ gearman_set_error(gearman, "gearman_echo", "corruption during echo");
2490 return GEARMAN_ECHO_DATA_CORRUPTION;
2491 }
2492
2493@@ -564,15 +560,15 @@
2494 * Packet related functions.
2495 */
2496
2497-gearman_packet_st *gearman_packet_create(gearman_st *gearman,
2498- gearman_packet_st *packet)
2499+gearman_packet_st *gearman_add_packet(gearman_st *gearman,
2500+ gearman_packet_st *packet)
2501 {
2502 if (packet == NULL)
2503 {
2504 packet= malloc(sizeof(gearman_packet_st));
2505 if (packet == NULL)
2506 {
2507- gearman_error_set(gearman, "gearman_packet_create", "malloc");
2508+ gearman_set_error(gearman, "gearman_add_packet", "malloc");
2509 return NULL;
2510 }
2511
2512@@ -604,42 +600,34 @@
2513 return packet;
2514 }
2515
2516-gearman_return_t gearman_packet_add(gearman_st *gearman,
2517- gearman_packet_st *packet,
2518- gearman_magic_t magic,
2519- gearman_command_t command,
2520- const void *arg, ...)
2521+gearman_return_t gearman_add_packet_args(gearman_st *gearman,
2522+ gearman_packet_st *packet,
2523+ gearman_magic_t magic,
2524+ gearman_command_t command,
2525+ const void *args[],
2526+ const size_t args_size[],
2527+ size_t args_count)
2528 {
2529- va_list ap;
2530- size_t arg_size;
2531 gearman_return_t ret;
2532+ size_t x;
2533
2534- packet= gearman_packet_create(gearman, packet);
2535+ packet= gearman_add_packet(gearman, packet);
2536 if (packet == NULL)
2537 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
2538
2539 packet->magic= magic;
2540 packet->command= command;
2541
2542- va_start(ap, arg);
2543-
2544- while (arg != NULL)
2545+ for (x= 0; x < args_count; x++)
2546 {
2547- arg_size = va_arg(ap, size_t);
2548-
2549- ret= gearman_packet_add_arg(packet, arg, arg_size);
2550+ ret= gearman_packet_add_arg(packet, args[x], args_size[x]);
2551 if (ret != GEARMAN_SUCCESS)
2552 {
2553- va_end(ap);
2554 gearman_packet_free(packet);
2555 return ret;
2556 }
2557-
2558- arg = va_arg(ap, void *);
2559 }
2560
2561- va_end(ap);
2562-
2563 return gearman_packet_pack_header(packet);
2564 }
2565
2566@@ -651,11 +639,11 @@
2567 if (packet->options & GEARMAN_PACKET_FREE_DATA && packet->data != NULL)
2568 {
2569 if (packet->gearman->workload_free_fn == NULL)
2570- free((void *)(packet->data));
2571+ free((void *)packet->data);
2572 else
2573 {
2574 packet->gearman->workload_free_fn((void *)(packet->data),
2575- (void *)(packet->gearman->workload_free_context));
2576+ (void *)packet->gearman->workload_free_context);
2577 }
2578 }
2579
2580@@ -674,50 +662,65 @@
2581 free(packet);
2582 }
2583
2584-void gearman_packet_free_all(gearman_st *gearman)
2585+void gearman_free_all_packets(gearman_st *gearman)
2586 {
2587 while (gearman->packet_list != NULL)
2588 gearman_packet_free(gearman->packet_list);
2589 }
2590
2591 /*
2592- * Local package functions.
2593+ * Local Definitions
2594 */
2595-void gearman_error_set(gearman_st *gearman, const char *function,
2596+
2597+void gearman_set_error(gearman_st *gearman, const char *function,
2598 const char *format, ...)
2599 {
2600- size_t length;
2601+ size_t size;
2602 char *ptr;
2603 char log_buffer[GEARMAN_MAX_ERROR_SIZE];
2604- va_list arg;
2605-
2606- va_start(arg, format);
2607-
2608- length= strlen(function);
2609-
2610- /* Copy the function name and : before the format */
2611- ptr= memcpy(log_buffer, function, length);
2612- ptr+= length;
2613+ va_list args;
2614+
2615+ size= strlen(function);
2616+ ptr= memcpy(log_buffer, function, size);
2617+ ptr+= size;
2618 ptr[0]= ':';
2619- length++;
2620+ size++;
2621 ptr++;
2622
2623- length+= (size_t)vsnprintf(ptr, GEARMAN_MAX_ERROR_SIZE - length, format, arg);
2624-
2625- if (gearman->log_fn == NULL)
2626- {
2627- if (length >= GEARMAN_MAX_ERROR_SIZE)
2628- length= GEARMAN_MAX_ERROR_SIZE - 1;
2629-
2630- memcpy(gearman->last_error, log_buffer, length + 1);
2631- }
2632- else
2633- {
2634- (*(gearman->log_fn))(log_buffer, GEARMAN_VERBOSE_FATAL,
2635- (void *)(gearman)->log_context);
2636- }
2637-
2638- va_end(arg);
2639+ va_start(args, format);
2640+ size+= (size_t)vsnprintf(ptr, GEARMAN_MAX_ERROR_SIZE - size, format, args);
2641+ va_end(args);
2642+
2643+ if (gearman->log_fn == NULL)
2644+ {
2645+ if (size >= GEARMAN_MAX_ERROR_SIZE)
2646+ size= GEARMAN_MAX_ERROR_SIZE - 1;
2647+
2648+ memcpy(gearman->last_error, log_buffer, size + 1);
2649+ }
2650+ else
2651+ {
2652+ gearman->log_fn(log_buffer, GEARMAN_VERBOSE_FATAL,
2653+ (void *)gearman->log_context);
2654+ }
2655+}
2656+
2657+void gearman_log(gearman_st *gearman, gearman_verbose_t verbose,
2658+ const char *format, va_list args)
2659+{
2660+ char log_buffer[GEARMAN_MAX_ERROR_SIZE];
2661+
2662+ if (gearman->log_fn == NULL)
2663+ {
2664+ printf("%5s: ", gearman_verbose_name(verbose));
2665+ vprintf(format, args);
2666+ printf("\n");
2667+ }
2668+ else
2669+ {
2670+ vsnprintf(log_buffer, GEARMAN_MAX_ERROR_SIZE, format, args);
2671+ gearman->log_fn(log_buffer, verbose, (void *)gearman->log_context);
2672+ }
2673 }
2674
2675 gearman_return_t gearman_parse_servers(const char *servers,
2676
2677=== modified file 'libgearman/gearman.h'
2678--- libgearman/gearman.h 2009-10-02 01:13:31 +0000
2679+++ libgearman/gearman.h 2009-11-04 22:14:14 +0000
2680@@ -8,7 +8,7 @@
2681
2682 /**
2683 * @file
2684- * @brief Gearman core declarations
2685+ * @brief Gearman Declarations
2686 */
2687
2688 #ifndef __GEARMAN_H__
2689@@ -25,7 +25,6 @@
2690 #include <arpa/inet.h>
2691 #include <poll.h>
2692 #include <sys/uio.h>
2693-#include <event.h>
2694 #include <stdarg.h>
2695
2696 #include <libgearman/visibility.h>
2697@@ -43,7 +42,8 @@
2698 #endif
2699
2700 /**
2701- * @addtogroup gearman Gearman Core Interface
2702+ * @addtogroup gearman Gearman Declarations
2703+ *
2704 * This is a low level interface for gearman library instances. This is used
2705 * internally by both client and worker interfaces, so you probably want to
2706 * look there first. This is usually used to write lower level clients, workers,
2707@@ -52,6 +52,7 @@
2708 * There is no locking within a single gearman_st structure, so for threaded
2709 * applications you must either ensure isolation in the application or use
2710 * multiple gearman_st structures (for example, one for each thread).
2711+ *
2712 * @{
2713 */
2714
2715@@ -266,7 +267,7 @@
2716 * failure this will be NULL.
2717 */
2718 GEARMAN_API
2719-gearman_con_st *gearman_con_create(gearman_st *gearman, gearman_con_st *con);
2720+gearman_con_st *gearman_add_con(gearman_st *gearman, gearman_con_st *con);
2721
2722 /**
2723 * Create a connection structure with the given host and port.
2724@@ -280,8 +281,8 @@
2725 * failure this will be NULL.
2726 */
2727 GEARMAN_API
2728-gearman_con_st *gearman_con_add(gearman_st *gearman, gearman_con_st *con,
2729- const char *host, in_port_t port);
2730+gearman_con_st *gearman_add_con_args(gearman_st *gearman, gearman_con_st *con,
2731+ const char *host, in_port_t port);
2732
2733 /**
2734 * Clone a connection structure.
2735@@ -294,14 +295,14 @@
2736 * failure this will be NULL.
2737 */
2738 GEARMAN_API
2739-gearman_con_st *gearman_con_clone(gearman_st *gearman, gearman_con_st *con,
2740+gearman_con_st *gearman_clone_con(gearman_st *gearman, gearman_con_st *con,
2741 const gearman_con_st *from);
2742
2743 /**
2744 * Free a connection structure.
2745 *
2746- * @param[in] con Structure previously initialized with gearman_con_create(),
2747- * gearman_con_add(), or gearman_con_clone().
2748+ * @param[in] con Structure previously initialized with gearman_add_con(),
2749+ * gearman_add_con_args(), or gearman_clone_con().
2750 */
2751 GEARMAN_API
2752 void gearman_con_free(gearman_con_st *con);
2753@@ -313,7 +314,7 @@
2754 * gearman_clone().
2755 */
2756 GEARMAN_API
2757-void gearman_con_free_all(gearman_st *gearman);
2758+void gearman_free_all_cons(gearman_st *gearman);
2759
2760 /**
2761 * Flush the send buffer for all connections.
2762@@ -323,7 +324,7 @@
2763 * @return Standard gearman return value.
2764 */
2765 GEARMAN_API
2766-gearman_return_t gearman_con_flush_all(gearman_st *gearman);
2767+gearman_return_t gearman_flush_all(gearman_st *gearman);
2768
2769 /**
2770 * Send packet to all connections.
2771@@ -334,8 +335,8 @@
2772 * @return Standard gearman return value.
2773 */
2774 GEARMAN_API
2775-gearman_return_t gearman_con_send_all(gearman_st *gearman,
2776- const gearman_packet_st *packet);
2777+gearman_return_t gearman_send_all(gearman_st *gearman,
2778+ const gearman_packet_st *packet);
2779
2780 /**
2781 * Wait for I/O on connections.
2782@@ -345,7 +346,7 @@
2783 * @return Standard gearman return value.
2784 */
2785 GEARMAN_API
2786-gearman_return_t gearman_con_wait(gearman_st *gearman);
2787+gearman_return_t gearman_wait(gearman_st *gearman);
2788
2789 /**
2790 * Get next connection that is ready for I/O.
2791@@ -355,7 +356,7 @@
2792 * @return Connection that is ready for I/O, or NULL if there are none.
2793 */
2794 GEARMAN_API
2795-gearman_con_st *gearman_con_ready(gearman_st *gearman);
2796+gearman_con_st *gearman_ready(gearman_st *gearman);
2797
2798 /**
2799 * Test echo with all connections.
2800@@ -367,8 +368,8 @@
2801 * @return Standard gearman return value.
2802 */
2803 GEARMAN_API
2804-gearman_return_t gearman_con_echo(gearman_st *gearman, const void *workload,
2805- size_t workload_size);
2806+gearman_return_t gearman_echo(gearman_st *gearman, const void *workload,
2807+ size_t workload_size);
2808
2809 /*
2810 * Packet related functions.
2811@@ -384,20 +385,27 @@
2812 * failure this will be NULL.
2813 */
2814 GEARMAN_API
2815-gearman_packet_st *gearman_packet_create(gearman_st *gearman,
2816- gearman_packet_st *packet);
2817+gearman_packet_st *gearman_add_packet(gearman_st *gearman,
2818+ gearman_packet_st *packet);
2819
2820 /**
2821- * Initialize a packet with all arguments. Variable list is NULL terminated
2822- * alternating argument and argument size (size_t) pairs. For example:
2823+ * Initialize a packet with all arguments. For example:
2824 *
2825 * @code
2826- * ret= gearman_packet_add_args(gearman, packet,
2827+ * void *args[3];
2828+ * size_t args_suze[3];
2829+ *
2830+ * args[0]= function_name;
2831+ * args_size[0]= strlen(function_name) + 1;
2832+ * args[1]= unique_string;
2833+ * args_size[1]= strlen(unique_string,) + 1;
2834+ * args[2]= workload;
2835+ * args_size[2]= workload_size;
2836+ *
2837+ * ret= gearman_add_packet_args(gearman, packet,
2838 * GEARMAN_MAGIC_REQUEST,
2839 * GEARMAN_COMMAND_SUBMIT_JOB,
2840- * function_name, strlen(function_name) + 1,
2841- * unique_string, strlen(unique_string) + 1,
2842- * workload, workload_size, NULL);
2843+ * args, args_size, 3);
2844 * @endcode
2845 *
2846 * @param[in] gearman Structure previously initialized with gearman_create() or
2847@@ -405,21 +413,25 @@
2848 * @param[in] packet Pre-allocated packet to initialize with arguments.
2849 * @param[in] magic Magic type for packet header.
2850 * @param[in] command Command type for packet.
2851- * @param[in] arg NULL terminated argument list in pairs of "arg, arg_size".
2852+ * @param[in] args Array of arguments to add.
2853+ * @param[in] args_size Array of sizes of each byte array in the args array.
2854+ * @param[in] args_count Number of elements in args/args_sizes arrays.
2855 * @return Standard gearman return value.
2856 */
2857 GEARMAN_API
2858-gearman_return_t gearman_packet_add(gearman_st *gearman,
2859- gearman_packet_st *packet,
2860- gearman_magic_t magic,
2861- gearman_command_t command,
2862- const void *arg, ...);
2863+gearman_return_t gearman_add_packet_args(gearman_st *gearman,
2864+ gearman_packet_st *packet,
2865+ gearman_magic_t magic,
2866+ gearman_command_t command,
2867+ const void *args[],
2868+ const size_t args_size[],
2869+ size_t args_count);
2870
2871 /**
2872 * Free a packet structure.
2873 *
2874 * @param[in] packet Structure previously initialized with
2875- * gearman_packet_create() or gearman_packet_add().
2876+ * gearman_add_packet() or gearman_add_packet_args().
2877 */
2878 GEARMAN_API
2879 void gearman_packet_free(gearman_packet_st *packet);
2880@@ -431,7 +443,7 @@
2881 * gearman_clone().
2882 */
2883 GEARMAN_API
2884-void gearman_packet_free_all(gearman_st *gearman);
2885+void gearman_free_all_packets(gearman_st *gearman);
2886
2887 /** @} */
2888
2889
2890=== added file 'libgearman/gearman_local.h'
2891--- libgearman/gearman_local.h 1970-01-01 00:00:00 +0000
2892+++ libgearman/gearman_local.h 2009-11-04 22:14:14 +0000
2893@@ -0,0 +1,150 @@
2894+/* Gearman server and library
2895+ * Copyright (C) 2008 Brian Aker, Eric Day
2896+ * All rights reserved.
2897+ *
2898+ * Use and distribution licensed under the BSD license. See
2899+ * the COPYING file in the parent directory for full text.
2900+ */
2901+
2902+/**
2903+ * @file
2904+ * @brief Local Gearman Declarations
2905+ */
2906+
2907+#ifndef __GEARMAN_LOCAL_H__
2908+#define __GEARMAN_LOCAL_H__
2909+
2910+#ifdef __cplusplus
2911+extern "C" {
2912+#endif
2913+
2914+/**
2915+ * @addtogroup gearman_local Local Gearman Declarations
2916+ * @ingroup gearman
2917+ * @{
2918+ */
2919+
2920+/**
2921+ * Set the error string.
2922+ *
2923+ * @param[in] gearman Structure previously initialized with gearman_create() or
2924+ * gearman_clone().
2925+ * @param[in] function Name of function the error happened in.
2926+ * @param[in] format Format and variable argument list of message.
2927+ */
2928+GEARMAN_LOCAL
2929+void gearman_set_error(gearman_st *gearman, const char *function,
2930+ const char *format, ...);
2931+
2932+/**
2933+ * Log a message.
2934+ *
2935+ * @param[in] gearman Structure previously initialized with gearman_create() or
2936+ * gearman_clone().
2937+ * @param[in] verbose Logging level of the message.
2938+ * @param[in] format Format and variable argument list of message.
2939+ * @param[in] args Variable argument list that has been initialized.
2940+ */
2941+GEARMAN_LOCAL
2942+void gearman_log(gearman_st *gearman, gearman_verbose_t verbose,
2943+ const char *format, va_list args);
2944+
2945+/**
2946+ * Log a fatal message, see gearman_log() for argument details.
2947+ */
2948+static inline void gearman_log_fatal(gearman_st *gearman, const char *format,
2949+ ...)
2950+{
2951+ va_list args;
2952+
2953+ if (gearman->verbose >= GEARMAN_VERBOSE_FATAL)
2954+ {
2955+ va_start(args, format);
2956+ gearman_log(gearman, GEARMAN_VERBOSE_FATAL, format, args);
2957+ va_end(args);
2958+ }
2959+}
2960+/**
2961+ * Log an error message, see gearman_log() for argument details.
2962+ */
2963+static inline void gearman_log_error(gearman_st *gearman, const char *format,
2964+ ...)
2965+{
2966+ va_list args;
2967+
2968+ if (gearman->verbose >= GEARMAN_VERBOSE_ERROR)
2969+ {
2970+ va_start(args, format);
2971+ gearman_log(gearman, GEARMAN_VERBOSE_ERROR, format, args);
2972+ va_end(args);
2973+ }
2974+}
2975+
2976+/**
2977+ * Log an info message, see gearman_log() for argument details.
2978+ */
2979+static inline void gearman_log_info(gearman_st *gearman, const char *format,
2980+ ...)
2981+{
2982+ va_list args;
2983+
2984+ if (gearman->verbose >= GEARMAN_VERBOSE_INFO)
2985+ {
2986+ va_start(args, format);
2987+ gearman_log(gearman, GEARMAN_VERBOSE_INFO, format, args);
2988+ va_end(args);
2989+ }
2990+}
2991+
2992+/**
2993+ * Log a debug message, see gearman_log() for argument details.
2994+ */
2995+static inline void gearman_log_debug(gearman_st *gearman, const char *format,
2996+ ...)
2997+{
2998+ va_list args;
2999+
3000+ if (gearman->verbose >= GEARMAN_VERBOSE_DEBUG)
3001+ {
3002+ va_start(args, format);
3003+ gearman_log(gearman, GEARMAN_VERBOSE_DEBUG, format, args);
3004+ va_end(args);
3005+ }
3006+}
3007+
3008+/**
3009+ * Log a crazy message, see gearman_log() for argument details.
3010+ */
3011+static inline void gearman_log_crazy(gearman_st *gearman, const char *format,
3012+ ...)
3013+{
3014+ va_list args;
3015+
3016+ if (gearman->verbose >= GEARMAN_VERBOSE_CRAZY)
3017+ {
3018+ va_start(args, format);
3019+ gearman_log(gearman, GEARMAN_VERBOSE_CRAZY, format, args);
3020+ va_end(args);
3021+ }
3022+}
3023+
3024+/**
3025+ * Utility function used for parsing server lists.
3026+ *
3027+ * @param[in] servers String containing a list of servers to parse.
3028+ * @param[in] callback Function to call for each server that is found.
3029+ * @param[in] context Argument to pass along with callback function.
3030+ * @return Standard Gearman return value.
3031+ */
3032+GEARMAN_LOCAL
3033+gearman_return_t gearman_parse_servers(const char *servers,
3034+ gearman_parse_server_fn *callback,
3035+ const void *context);
3036+
3037+/** @} */
3038+
3039+#ifdef __cplusplus
3040+}
3041+#endif
3042+
3043+#endif /* __GEARMAN_LOCAL_H__ */
3044
3045=== modified file 'libgearman/job.c'
3046--- libgearman/job.c 2009-09-23 05:25:01 +0000
3047+++ libgearman/job.c 2009-11-04 22:14:14 +0000
3048@@ -8,17 +8,13 @@
3049
3050 /**
3051 * @file
3052- * @brief Job definitions
3053+ * @brief Job Definitions
3054 */
3055
3056 #include "common.h"
3057
3058-/*
3059- * Private declarations
3060- */
3061-
3062 /**
3063- * @addtogroup gearman_job_private Private Job Functions
3064+ * @addtogroup gearman_job_static Static Job Declarations
3065 * @ingroup gearman_job
3066 * @{
3067 */
3068@@ -31,20 +27,26 @@
3069 /** @} */
3070
3071 /*
3072- * Public definitions
3073+ * Public Definitions
3074 */
3075
3076 gearman_return_t gearman_job_send_data(gearman_job_st *job, const void *data,
3077 size_t data_size)
3078 {
3079 gearman_return_t ret;
3080+ const void *args[2];
3081+ size_t args_size[2];
3082
3083 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
3084 {
3085- ret= gearman_packet_add(job->worker->gearman, &(job->work),
3086- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_DATA,
3087- job->assigned.arg[0], job->assigned.arg_size[0],
3088- data, data_size, NULL);
3089+ args[0]= job->assigned.arg[0];
3090+ args_size[0]= job->assigned.arg_size[0];
3091+ args[1]= data;
3092+ args_size[1]= data_size;
3093+ ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
3094+ GEARMAN_MAGIC_REQUEST,
3095+ GEARMAN_COMMAND_WORK_DATA,
3096+ args, args_size, 2);
3097 if (ret != GEARMAN_SUCCESS)
3098 return ret;
3099
3100@@ -59,13 +61,19 @@
3101 size_t warning_size)
3102 {
3103 gearman_return_t ret;
3104+ const void *args[2];
3105+ size_t args_size[2];
3106
3107 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
3108 {
3109- ret= gearman_packet_add(job->worker->gearman, &(job->work),
3110- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_WARNING,
3111- job->assigned.arg[0], job->assigned.arg_size[0],
3112- warning, warning_size, NULL);
3113+ args[0]= job->assigned.arg[0];
3114+ args_size[0]= job->assigned.arg_size[0];
3115+ args[1]= warning;
3116+ args_size[1]= warning_size;
3117+ ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
3118+ GEARMAN_MAGIC_REQUEST,
3119+ GEARMAN_COMMAND_WORK_WARNING,
3120+ args, args_size, 2);
3121 if (ret != GEARMAN_SUCCESS)
3122 return ret;
3123
3124@@ -82,18 +90,24 @@
3125 gearman_return_t ret;
3126 char numerator_string[12];
3127 char denominator_string[12];
3128+ const void *args[3];
3129+ size_t args_size[3];
3130
3131 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
3132 {
3133 snprintf(numerator_string, 12, "%u", numerator);
3134 snprintf(denominator_string, 12, "%u", denominator);
3135
3136- ret= gearman_packet_add(job->worker->gearman, &(job->work),
3137- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_STATUS,
3138- job->assigned.arg[0], job->assigned.arg_size[0],
3139- numerator_string, strlen(numerator_string) + 1,
3140- denominator_string, strlen(denominator_string),
3141- NULL);
3142+ args[0]= job->assigned.arg[0];
3143+ args_size[0]= job->assigned.arg_size[0];
3144+ args[1]= numerator_string;
3145+ args_size[1]= strlen(numerator_string) + 1;
3146+ args[2]= denominator_string;
3147+ args_size[2]= strlen(denominator_string);
3148+ ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
3149+ GEARMAN_MAGIC_REQUEST,
3150+ GEARMAN_COMMAND_WORK_STATUS,
3151+ args, args_size, 3);
3152 if (ret != GEARMAN_SUCCESS)
3153 return ret;
3154
3155@@ -108,17 +122,22 @@
3156 size_t result_size)
3157 {
3158 gearman_return_t ret;
3159+ const void *args[2];
3160+ size_t args_size[2];
3161
3162 if (job->options & GEARMAN_JOB_FINISHED)
3163 return GEARMAN_SUCCESS;
3164
3165 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
3166 {
3167- ret= gearman_packet_add(job->worker->gearman, &(job->work),
3168- GEARMAN_MAGIC_REQUEST,
3169- GEARMAN_COMMAND_WORK_COMPLETE,
3170- job->assigned.arg[0], job->assigned.arg_size[0],
3171- result, result_size, NULL);
3172+ args[0]= job->assigned.arg[0];
3173+ args_size[0]= job->assigned.arg_size[0];
3174+ args[1]= result;
3175+ args_size[1]= result_size;
3176+ ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
3177+ GEARMAN_MAGIC_REQUEST,
3178+ GEARMAN_COMMAND_WORK_COMPLETE,
3179+ args, args_size, 2);
3180 if (ret != GEARMAN_SUCCESS)
3181 return ret;
3182
3183@@ -138,14 +157,19 @@
3184 size_t exception_size)
3185 {
3186 gearman_return_t ret;
3187+ const void *args[2];
3188+ size_t args_size[2];
3189
3190 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
3191 {
3192- ret= gearman_packet_add(job->worker->gearman, &(job->work),
3193- GEARMAN_MAGIC_REQUEST,
3194- GEARMAN_COMMAND_WORK_EXCEPTION,
3195- job->assigned.arg[0], job->assigned.arg_size[0],
3196- exception, exception_size, NULL);
3197+ args[0]= job->assigned.arg[0];
3198+ args_size[0]= job->assigned.arg_size[0];
3199+ args[1]= exception;
3200+ args_size[1]= exception_size;
3201+ ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
3202+ GEARMAN_MAGIC_REQUEST,
3203+ GEARMAN_COMMAND_WORK_EXCEPTION,
3204+ args, args_size, 2);
3205 if (ret != GEARMAN_SUCCESS)
3206 return ret;
3207
3208@@ -158,16 +182,20 @@
3209 gearman_return_t gearman_job_send_fail(gearman_job_st *job)
3210 {
3211 gearman_return_t ret;
3212+ const void *args[1];
3213+ size_t args_size[1];
3214
3215 if (job->options & GEARMAN_JOB_FINISHED)
3216 return GEARMAN_SUCCESS;
3217
3218 if (!(job->options & GEARMAN_JOB_WORK_IN_USE))
3219 {
3220- ret= gearman_packet_add(job->worker->gearman, &(job->work),
3221- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_WORK_FAIL,
3222- job->assigned.arg[0], job->assigned.arg_size[0] - 1,
3223- NULL);
3224+ args[0]= job->assigned.arg[0];
3225+ args_size[0]= job->assigned.arg_size[0] - 1;
3226+ ret= gearman_add_packet_args(job->worker->gearman, &(job->work),
3227+ GEARMAN_MAGIC_REQUEST,
3228+ GEARMAN_COMMAND_WORK_FAIL,
3229+ args, args_size, 2);
3230 if (ret != GEARMAN_SUCCESS)
3231 return ret;
3232
3233@@ -215,7 +243,7 @@
3234 }
3235
3236 /*
3237- * Private definitions
3238+ * Static Definitions
3239 */
3240
3241 static gearman_return_t _job_send(gearman_job_st *job)
3242
3243=== modified file 'libgearman/job.h'
3244--- libgearman/job.h 2009-09-23 05:25:01 +0000
3245+++ libgearman/job.h 2009-11-04 22:14:14 +0000
3246@@ -8,7 +8,7 @@
3247
3248 /**
3249 * @file
3250- * @brief Job declarations
3251+ * @brief Job Declarations
3252 */
3253
3254 #ifndef __GEARMAN_JOB_H__
3255@@ -19,10 +19,12 @@
3256 #endif
3257
3258 /**
3259- * @addtogroup gearman_job Job Management
3260+ * @addtogroup gearman_job Job Declarations
3261 * @ingroup gearman_worker
3262+ *
3263 * The job functions are used to manage jobs assigned to workers. It is most
3264 * commonly used with the worker interface.
3265+ *
3266 * @{
3267 */
3268
3269
3270=== modified file 'libgearman/packet.c'
3271--- libgearman/packet.c 2009-09-26 08:14:01 +0000
3272+++ libgearman/packet.c 2009-11-04 22:14:14 +0000
3273@@ -8,17 +8,13 @@
3274
3275 /**
3276 * @file
3277- * @brief Packet definitions
3278+ * @brief Packet Definitions
3279 */
3280
3281 #include "common.h"
3282
3283-/*
3284- * Private declarations
3285- */
3286-
3287 /**
3288- * @addtogroup gearman_packet_private Private Packet Functions
3289+ * @addtogroup gearman_packet_static Static Packet Declarations
3290 * @ingroup gearman_packet
3291 * @{
3292 */
3293@@ -71,7 +67,7 @@
3294 /** @} */
3295
3296 /*
3297- * Public definitions
3298+ * Public Definitions
3299 */
3300
3301 gearman_return_t gearman_packet_add_arg(gearman_packet_st *packet,
3302@@ -85,7 +81,7 @@
3303 (!(gearman_command_info_list[packet->command].data) ||
3304 packet->data != NULL))
3305 {
3306- gearman_error_set(packet->gearman, "gearman_packet_add_arg",
3307+ gearman_set_error(packet->gearman, "gearman_packet_add_arg",
3308 "too many arguments for command");
3309 return GEARMAN_TOO_MANY_ARGS;
3310 }
3311@@ -110,7 +106,7 @@
3312 new_args= realloc(packet->args, packet->args_size + arg_size);
3313 if (new_args == NULL)
3314 {
3315- gearman_error_set(packet->gearman, "gearman_packet_add_arg", "realloc");
3316+ gearman_set_error(packet->gearman, "gearman_packet_add_arg", "realloc");
3317 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
3318 }
3319
3320@@ -169,7 +165,7 @@
3321 break;
3322
3323 default:
3324- gearman_error_set(packet->gearman, "gearman_packet_pack_header",
3325+ gearman_set_error(packet->gearman, "gearman_packet_pack_header",
3326 "invalid magic value");
3327 return GEARMAN_INVALID_MAGIC;
3328 }
3329@@ -177,7 +173,7 @@
3330 if (packet->command == GEARMAN_COMMAND_TEXT ||
3331 packet->command >= GEARMAN_COMMAND_MAX)
3332 {
3333- gearman_error_set(packet->gearman, "gearman_packet_pack_header",
3334+ gearman_set_error(packet->gearman, "gearman_packet_pack_header",
3335 "invalid command value");
3336 return GEARMAN_INVALID_COMMAND;
3337 }
3338@@ -206,7 +202,7 @@
3339 packet->magic= GEARMAN_MAGIC_RESPONSE;
3340 else
3341 {
3342- gearman_error_set(packet->gearman, "gearman_packet_unpack_header",
3343+ gearman_set_error(packet->gearman, "gearman_packet_unpack_header",
3344 "invalid magic value");
3345 return GEARMAN_INVALID_MAGIC;
3346 }
3347@@ -217,7 +213,7 @@
3348 if (packet->command == GEARMAN_COMMAND_TEXT ||
3349 packet->command >= GEARMAN_COMMAND_MAX)
3350 {
3351- gearman_error_set(packet->gearman, "gearman_packet_unpack_header",
3352+ gearman_set_error(packet->gearman, "gearman_packet_unpack_header",
3353 "invalid command value");
3354 return GEARMAN_INVALID_COMMAND;
3355 }
3356
3357=== modified file 'libgearman/packet.h'
3358--- libgearman/packet.h 2009-09-24 23:43:15 +0000
3359+++ libgearman/packet.h 2009-11-04 22:14:14 +0000
3360@@ -8,7 +8,7 @@
3361
3362 /**
3363 * @file
3364- * @brief Packet declarations
3365+ * @brief Packet Declarations
3366 */
3367
3368 #ifndef __GEARMAN_PACKET_H__
3369@@ -26,11 +26,14 @@
3370 gearman_command_info_st gearman_command_info_list[GEARMAN_COMMAND_MAX];
3371
3372 /**
3373- * @addtogroup gearman_packet Packet Handling
3374+ * @addtogroup gearman_packet Packet Declarations
3375+ * @ingroup gearman
3376+ *
3377 * This is a low level interface for gearman packet. This is used internally
3378 * internally by both client and worker interfaces (or more specifically, tasks
3379 * and jobs), so you probably want to look there first. This is usually used to
3380 * write lower level clients, workers, proxies, or your own server.
3381+ *
3382 * @{
3383 */
3384
3385
3386=== modified file 'libgearman/structs.h'
3387--- libgearman/structs.h 2009-09-28 17:47:34 +0000
3388+++ libgearman/structs.h 2009-11-04 22:14:14 +0000
3389@@ -8,7 +8,7 @@
3390
3391 /**
3392 * @file
3393- * @brief Struct definitions
3394+ * @brief Struct Definitions
3395 */
3396
3397 #ifndef __GEARMAN_STRUCTS_H__
3398
3399=== modified file 'libgearman/task.c'
3400--- libgearman/task.c 2009-09-23 05:25:01 +0000
3401+++ libgearman/task.c 2009-11-04 22:14:14 +0000
3402@@ -8,13 +8,13 @@
3403
3404 /**
3405 * @file
3406- * @brief Task definitions
3407+ * @brief Task Definitions
3408 */
3409
3410 #include "common.h"
3411
3412 /*
3413- * Public definitions
3414+ * Public Definitions
3415 */
3416
3417 void *gearman_task_context(const gearman_task_st *task)
3418
3419=== modified file 'libgearman/task.h'
3420--- libgearman/task.h 2009-09-23 05:25:01 +0000
3421+++ libgearman/task.h 2009-11-04 22:14:14 +0000
3422@@ -8,7 +8,7 @@
3423
3424 /**
3425 * @file
3426- * @brief Task declarations
3427+ * @brief Task Declarations
3428 */
3429
3430 #ifndef __GEARMAN_TASK_H__
3431@@ -19,10 +19,12 @@
3432 #endif
3433
3434 /**
3435- * @addtogroup gearman_task Task Management
3436+ * @addtogroup gearman_task Task Declarations
3437 * @ingroup gearman_client
3438+ *
3439 * The task functions are used to manage tasks being run by clients. They are
3440 * most commonly used with the client interface.
3441+ *
3442 * @{
3443 */
3444
3445
3446=== modified file 'libgearman/visibility.h'
3447--- libgearman/visibility.h 2009-09-18 02:48:06 +0000
3448+++ libgearman/visibility.h 2009-11-04 22:14:14 +0000
3449@@ -10,14 +10,13 @@
3450
3451 /**
3452 * @file
3453- * @brief Visibility control macros
3454+ * @brief Visibility Control Macros
3455 */
3456
3457 #ifndef __GEARMAN_VISIBILITY_H
3458 #define __GEARMAN_VISIBILITY_H
3459
3460 /**
3461- *
3462 * GEARMAN_API is used for the public API symbols. It either DLL imports or
3463 * DLL exports (or does nothing for static build).
3464 *
3465@@ -28,6 +27,9 @@
3466 # if defined(HAVE_VISIBILITY)
3467 # define GEARMAN_API __attribute__ ((visibility("default")))
3468 # define GEARMAN_LOCAL __attribute__ ((visibility("hidden")))
3469+# elif defined (__SUNPRO_C) && (__SUNPRO_C >= 0x550)
3470+# define GEARMAN_API __global
3471+# define GEARMAN_API __hidden
3472 # elif defined(_MSC_VER)
3473 # define GEARMAN_API extern __declspec(dllexport)
3474 # define GEARMAN_LOCAL
3475
3476=== modified file 'libgearman/worker.c'
3477--- libgearman/worker.c 2009-09-28 17:47:34 +0000
3478+++ libgearman/worker.c 2009-11-04 22:14:14 +0000
3479@@ -8,17 +8,13 @@
3480
3481 /**
3482 * @file
3483- * @brief Worker definitions
3484+ * @brief Worker Definitions
3485 */
3486
3487 #include "common.h"
3488
3489-/*
3490- * Private declarations
3491- */
3492-
3493 /**
3494- * @addtogroup gearman_worker_private Private Worker Functions
3495+ * @addtogroup gearman_worker_static Static Worker Declarations
3496 * @ingroup gearman_worker
3497 * @{
3498 */
3499@@ -63,7 +59,7 @@
3500 /** @} */
3501
3502 /*
3503- * Public definitions
3504+ * Public Definitions
3505 */
3506
3507 gearman_worker_st *gearman_worker_create(gearman_worker_st *worker)
3508@@ -140,7 +136,7 @@
3509 else
3510 {
3511 worker->gearman->workload_free_fn(worker->work_result,
3512- (void *)(worker->gearman->workload_free_context));
3513+ (void *)worker->gearman->workload_free_context);
3514 }
3515 }
3516
3517@@ -262,7 +258,7 @@
3518 gearman_return_t gearman_worker_add_server(gearman_worker_st *worker,
3519 const char *host, in_port_t port)
3520 {
3521- if (gearman_con_add(worker->gearman, NULL, host, port) == NULL)
3522+ if (gearman_add_con_args(worker->gearman, NULL, host, port) == NULL)
3523 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
3524
3525 return GEARMAN_SUCCESS;
3526@@ -274,9 +270,14 @@
3527 return gearman_parse_servers(servers, _worker_add_server, worker);
3528 }
3529
3530+void gearman_worker_remove_servers(gearman_worker_st *worker)
3531+{
3532+ gearman_free_all_cons(worker->gearman);
3533+}
3534+
3535 gearman_return_t gearman_worker_wait(gearman_worker_st *worker)
3536 {
3537- return gearman_con_wait(worker->gearman);
3538+ return gearman_wait(worker->gearman);
3539 }
3540
3541 gearman_return_t gearman_worker_register(gearman_worker_st *worker,
3542@@ -291,6 +292,8 @@
3543 {
3544 gearman_worker_function_st *function;
3545 gearman_return_t ret;
3546+ const void *args[1];
3547+ size_t args_size[1];
3548
3549 for (function= worker->function_list; function != NULL;
3550 function= function->next)
3551@@ -304,10 +307,11 @@
3552
3553 gearman_packet_free(&(function->packet));
3554
3555- ret= gearman_packet_add(worker->gearman, &(function->packet),
3556- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CANT_DO,
3557- (uint8_t *)function_name, strlen(function_name),
3558- NULL);
3559+ args[0]= function_name;
3560+ args_size[0]= strlen(function_name);
3561+ ret= gearman_add_packet_args(worker->gearman, &(function->packet),
3562+ GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CANT_DO,
3563+ args, args_size, 1);
3564 if (ret != GEARMAN_SUCCESS)
3565 {
3566 function->options&=
3567@@ -335,9 +339,11 @@
3568
3569 gearman_packet_free(&(worker->function_list->packet));
3570
3571- ret= gearman_packet_add(worker->gearman, &(worker->function_list->packet),
3572- GEARMAN_MAGIC_REQUEST,
3573- GEARMAN_COMMAND_RESET_ABILITIES, NULL);
3574+ ret= gearman_add_packet_args(worker->gearman,
3575+ &(worker->function_list->packet),
3576+ GEARMAN_MAGIC_REQUEST,
3577+ GEARMAN_COMMAND_RESET_ABILITIES,
3578+ NULL, NULL, 0);
3579 if (ret != GEARMAN_SUCCESS)
3580 {
3581 worker->function_list->options&=
3582@@ -419,7 +425,7 @@
3583
3584 if (worker->function_list == NULL)
3585 {
3586- gearman_error_set(worker->gearman, "gearman_worker_grab_job",
3587+ gearman_set_error(worker->gearman, "gearman_worker_grab_job",
3588 "no functions have been registered");
3589 *ret_ptr= GEARMAN_NO_REGISTERED_FUNCTIONS;
3590 return NULL;
3591@@ -521,7 +527,7 @@
3592
3593 if (worker->job->assigned.command != GEARMAN_COMMAND_NOOP)
3594 {
3595- gearman_error_set(worker->gearman, "gearman_worker_grab_job",
3596+ gearman_set_error(worker->gearman, "gearman_worker_grab_job",
3597 "unexpected packet:%s",
3598 gearman_command_info_list[worker->job->assigned.command].name);
3599 gearman_packet_free(&(worker->job->assigned));
3600@@ -588,7 +594,7 @@
3601
3602 if (worker->options & GEARMAN_WORKER_TIMEOUT_RETURN)
3603 {
3604- gearman_error_set(worker->gearman, "gearman_worker_grab_job",
3605+ gearman_set_error(worker->gearman, "gearman_worker_grab_job",
3606 "timeout reached");
3607 *ret_ptr= GEARMAN_TIMEOUT;
3608 return NULL;
3609@@ -597,7 +603,7 @@
3610 }
3611 else
3612 {
3613- *ret_ptr= gearman_con_wait(worker->gearman);
3614+ *ret_ptr= gearman_wait(worker->gearman);
3615 if (*ret_ptr != GEARMAN_SUCCESS && (*ret_ptr != GEARMAN_TIMEOUT ||
3616 worker->options & GEARMAN_WORKER_TIMEOUT_RETURN))
3617 {
3618@@ -608,7 +614,7 @@
3619 break;
3620
3621 default:
3622- gearman_error_set(worker->gearman, "gearman_worker_grab_job",
3623+ gearman_set_error(worker->gearman, "gearman_worker_grab_job",
3624 "unknown state: %u", worker->state);
3625 *ret_ptr= GEARMAN_UNKNOWN_STATE;
3626 return NULL;
3627@@ -650,14 +656,14 @@
3628 {
3629 if (function_name == NULL)
3630 {
3631- gearman_error_set(worker->gearman, "gearman_worker_add_function",
3632+ gearman_set_error(worker->gearman, "gearman_worker_add_function",
3633 "function name not given");
3634 return GEARMAN_INVALID_FUNCTION_NAME;
3635 }
3636
3637 if (worker_fn == NULL)
3638 {
3639- gearman_error_set(worker->gearman, "gearman_worker_add_function",
3640+ gearman_set_error(worker->gearman, "gearman_worker_add_function",
3641 "function not given");
3642 return GEARMAN_INVALID_WORKER_FUNCTION;
3643 }
3644@@ -691,7 +697,7 @@
3645 if (worker->work_function == NULL)
3646 {
3647 gearman_job_free(&(worker->work_job));
3648- gearman_error_set(worker->gearman, "gearman_worker_work",
3649+ gearman_set_error(worker->gearman, "gearman_worker_work",
3650 "function not found");
3651 return GEARMAN_INVALID_FUNCTION_NAME;
3652 }
3653@@ -699,7 +705,7 @@
3654 if (worker->work_function->worker_fn == NULL)
3655 {
3656 gearman_job_free(&(worker->work_job));
3657- gearman_error_set(worker->gearman, "gearman_worker_work",
3658+ gearman_set_error(worker->gearman, "gearman_worker_work",
3659 "no callback function supplied");
3660 return GEARMAN_INVALID_FUNCTION_NAME;
3661 }
3662@@ -708,10 +714,9 @@
3663 worker->work_result_size= 0;
3664
3665 case GEARMAN_WORKER_WORK_STATE_FUNCTION:
3666- worker->work_result= (*(worker->work_function->worker_fn))(
3667- &(worker->work_job),
3668- (void *)(worker->work_function->context),
3669- &(worker->work_result_size), &ret);
3670+ worker->work_result= worker->work_function->worker_fn(&(worker->work_job),
3671+ (void *)worker->work_function->context,
3672+ &(worker->work_result_size), &ret);
3673 if (ret == GEARMAN_WORK_FAIL)
3674 {
3675 ret= gearman_job_send_fail(&(worker->work_job));
3676@@ -752,7 +757,7 @@
3677 else
3678 {
3679 worker->gearman->workload_free_fn(worker->work_result,
3680- (void *)(worker->gearman->workload_free_context));
3681+ (void *)worker->gearman->workload_free_context);
3682 }
3683 worker->work_result= NULL;
3684 }
3685@@ -780,7 +785,7 @@
3686 break;
3687
3688 default:
3689- gearman_error_set(worker->gearman, "gearman_worker_work",
3690+ gearman_set_error(worker->gearman, "gearman_worker_work",
3691 "unknown state: %u", worker->work_state);
3692 return GEARMAN_UNKNOWN_STATE;
3693 }
3694@@ -795,11 +800,11 @@
3695 const void *workload,
3696 size_t workload_size)
3697 {
3698- return gearman_con_echo(worker->gearman, workload, workload_size);
3699+ return gearman_echo(worker->gearman, workload, workload_size);
3700 }
3701
3702 /*
3703- * Private definitions
3704+ * Static Definitions
3705 */
3706
3707 static gearman_worker_st *_worker_allocate(gearman_worker_st *worker)
3708@@ -836,15 +841,15 @@
3709 {
3710 gearman_return_t ret;
3711
3712- ret= gearman_packet_add(worker->gearman, &(worker->grab_job),
3713- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_GRAB_JOB,
3714- NULL);
3715+ ret= gearman_add_packet_args(worker->gearman, &(worker->grab_job),
3716+ GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_GRAB_JOB,
3717+ NULL, NULL, 0);
3718 if (ret != GEARMAN_SUCCESS)
3719 return ret;
3720
3721- ret= gearman_packet_add(worker->gearman, &(worker->pre_sleep),
3722- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_PRE_SLEEP,
3723- NULL);
3724+ ret= gearman_add_packet_args(worker->gearman, &(worker->pre_sleep),
3725+ GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_PRE_SLEEP,
3726+ NULL, NULL, 0);
3727 if (ret != GEARMAN_SUCCESS)
3728 {
3729 gearman_packet_free(&(worker->grab_job));
3730@@ -871,11 +876,13 @@
3731 gearman_worker_function_st *function;
3732 gearman_return_t ret;
3733 char timeout_buffer[11];
3734+ const void *args[2];
3735+ size_t args_size[2];
3736
3737 function= malloc(sizeof(gearman_worker_function_st));
3738 if (function == NULL)
3739 {
3740- gearman_error_set(worker->gearman, "_worker_function_add", "malloc");
3741+ gearman_set_error(worker->gearman, "_worker_function_add", "malloc");
3742 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
3743 }
3744
3745@@ -886,7 +893,7 @@
3746 if (function->function_name == NULL)
3747 {
3748 free(function);
3749- gearman_error_set(worker->gearman, "gearman_worker_add_function", "strdup");
3750+ gearman_set_error(worker->gearman, "gearman_worker_add_function", "strdup");
3751 return GEARMAN_MEMORY_ALLOCATION_FAILURE;
3752 }
3753
3754@@ -896,20 +903,22 @@
3755 if (timeout > 0)
3756 {
3757 snprintf(timeout_buffer, 11, "%u", timeout);
3758- ret= gearman_packet_add(worker->gearman, &(function->packet),
3759- GEARMAN_MAGIC_REQUEST,
3760- GEARMAN_COMMAND_CAN_DO_TIMEOUT,
3761- (uint8_t *)function_name,
3762- strlen(function_name) + 1,
3763- (uint8_t *)timeout_buffer,
3764- strlen(timeout_buffer), NULL);
3765+ args[0]= function_name;
3766+ args_size[0]= strlen(function_name) + 1;
3767+ args[1]= timeout_buffer;
3768+ args_size[1]= strlen(timeout_buffer);
3769+ ret= gearman_add_packet_args(worker->gearman, &(function->packet),
3770+ GEARMAN_MAGIC_REQUEST,
3771+ GEARMAN_COMMAND_CAN_DO_TIMEOUT,
3772+ args, args_size, 2);
3773 }
3774 else
3775 {
3776- ret= gearman_packet_add(worker->gearman, &(function->packet),
3777- GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CAN_DO,
3778- (uint8_t *)function_name, strlen(function_name),
3779- NULL);
3780+ args[0]= function_name;
3781+ args_size[0]= strlen(function_name);
3782+ ret= gearman_add_packet_args(worker->gearman, &(function->packet),
3783+ GEARMAN_MAGIC_REQUEST, GEARMAN_COMMAND_CAN_DO,
3784+ args, args_size, 1);
3785 }
3786 if (ret != GEARMAN_SUCCESS)
3787 {
3788@@ -956,7 +965,7 @@
3789 job= malloc(sizeof(gearman_job_st));
3790 if (job == NULL)
3791 {
3792- gearman_error_set(worker->gearman, "_job_create", "malloc");
3793+ gearman_set_error(worker->gearman, "_job_create", "malloc");
3794 return NULL;
3795 }
3796
3797
3798=== modified file 'libgearman/worker.h'
3799--- libgearman/worker.h 2009-10-02 01:13:31 +0000
3800+++ libgearman/worker.h 2009-11-04 22:14:14 +0000
3801@@ -8,7 +8,7 @@
3802
3803 /**
3804 * @file
3805- * @brief Worker declarations
3806+ * @brief Worker Declarations
3807 */
3808
3809 #ifndef __GEARMAN_WORKER_H__
3810@@ -19,7 +19,8 @@
3811 #endif
3812
3813 /**
3814- * @addtogroup gearman_worker Worker Interface
3815+ * @addtogroup gearman_worker Worker Declarations
3816+ *
3817 * This is the interface gearman workers should use.
3818 *
3819 * @ref main_page_worker "See Main Page for full details."
3820
3821=== modified file 'tests/client_test.c'
3822--- tests/client_test.c 2009-09-26 09:21:13 +0000
3823+++ tests/client_test.c 2009-11-04 22:14:14 +0000
3824@@ -45,8 +45,8 @@
3825 test_return post(void *object);
3826 test_return flush(void);
3827
3828-void *client_test_worker(gearman_job_st *job, void *cb_arg, size_t *result_size,
3829- gearman_return_t *ret_ptr);
3830+void *client_test_worker(gearman_job_st *job, void *context,
3831+ size_t *result_size, gearman_return_t *ret_ptr);
3832 void *world_create(void);
3833 void world_destroy(void *object);
3834
3835@@ -292,7 +292,8 @@
3836 return TEST_SUCCESS;
3837 }
3838
3839-static void log_counter(const char *line, gearman_verbose_t verbose, void *context)
3840+static void log_counter(const char *line, gearman_verbose_t verbose,
3841+ void *context)
3842 {
3843 uint32_t *counter= (uint32_t *)context;
3844
3845@@ -323,12 +324,12 @@
3846 }
3847
3848
3849-void *client_test_worker(gearman_job_st *job, void *cb_arg, size_t *result_size,
3850- gearman_return_t *ret_ptr)
3851+void *client_test_worker(gearman_job_st *job, void *context,
3852+ size_t *result_size, gearman_return_t *ret_ptr)
3853 {
3854 const uint8_t *workload;
3855 uint8_t *result;
3856- (void)cb_arg;
3857+ (void)context;
3858
3859 workload= gearman_job_workload(job);
3860 *result_size= gearman_job_workload_size(job);
3861
3862=== modified file 'tests/memcached_test.c'
3863--- tests/memcached_test.c 2009-07-28 07:12:24 +0000
3864+++ tests/memcached_test.c 2009-11-04 22:14:14 +0000
3865@@ -43,8 +43,7 @@
3866
3867 /* Counter test for worker */
3868 static void *counter_function(gearman_job_st *job __attribute__((unused)),
3869- void *context,
3870- size_t *result_size,
3871+ void *context, size_t *result_size,
3872 gearman_return_t *ret_ptr __attribute__((unused)))
3873 {
3874 uint32_t *counter= (uint32_t *)context;
3875
3876=== modified file 'tests/sqlite_test.c'
3877--- tests/sqlite_test.c 2009-10-11 07:24:42 +0000
3878+++ tests/sqlite_test.c 2009-11-04 22:14:14 +0000
3879@@ -43,8 +43,7 @@
3880
3881 /* Counter test for worker */
3882 static void *counter_function(gearman_job_st *job __attribute__((unused)),
3883- void *context,
3884- size_t *result_size,
3885+ void *context, size_t *result_size,
3886 gearman_return_t *ret_ptr __attribute__((unused)))
3887 {
3888 uint32_t *counter= (uint32_t *)context;
3889
3890=== modified file 'tests/worker_test.c'
3891--- tests/worker_test.c 2009-09-23 21:05:40 +0000
3892+++ tests/worker_test.c 2009-11-04 22:14:14 +0000
3893@@ -107,46 +107,51 @@
3894 gearman_con_st con;
3895 gearman_packet_st packet;
3896 uint32_t x;
3897+ const void *args[1];
3898+ size_t args_size[1];
3899
3900 if (gearman_create(&gearman) == NULL)
3901 return TEST_FAILURE;
3902
3903 for (x= 0; x < 2; x++)
3904 {
3905- if (gearman_con_create(&gearman, &con) == NULL)
3906+ if (gearman_add_con(&gearman, &con) == NULL)
3907 return TEST_FAILURE;
3908
3909 gearman_con_set_host(&con, NULL);
3910 gearman_con_set_port(&con, WORKER_TEST_PORT);
3911
3912- if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3913- GEARMAN_COMMAND_SET_CLIENT_ID,
3914- (uint8_t *)"testUnregisterFunction", 13,
3915- NULL) != GEARMAN_SUCCESS)
3916- {
3917- return TEST_FAILURE;
3918- }
3919-
3920- if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
3921- return TEST_FAILURE;
3922-
3923- gearman_packet_free(&packet);
3924-
3925- if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3926- GEARMAN_COMMAND_CAN_DO, (uint8_t *)"reverse", 7,
3927- NULL) != GEARMAN_SUCCESS)
3928- {
3929- return TEST_FAILURE;
3930- }
3931-
3932- if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
3933- return TEST_FAILURE;
3934-
3935- gearman_packet_free(&packet);
3936-
3937- if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3938- GEARMAN_COMMAND_CANT_DO, (uint8_t *)"reverse", 7,
3939- NULL) != GEARMAN_SUCCESS)
3940+ args[0]= "testUnregisterFunction";
3941+ args_size[0]= strlen("testUnregisterFunction");
3942+ if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3943+ GEARMAN_COMMAND_SET_CLIENT_ID,
3944+ args, args_size, 1) != GEARMAN_SUCCESS)
3945+ {
3946+ return TEST_FAILURE;
3947+ }
3948+
3949+ if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
3950+ return TEST_FAILURE;
3951+
3952+ gearman_packet_free(&packet);
3953+
3954+ args[0]= "reverse";
3955+ args_size[0]= strlen("reverse");
3956+ if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3957+ GEARMAN_COMMAND_CAN_DO,
3958+ args, args_size, 1) != GEARMAN_SUCCESS)
3959+ {
3960+ return TEST_FAILURE;
3961+ }
3962+
3963+ if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
3964+ return TEST_FAILURE;
3965+
3966+ gearman_packet_free(&packet);
3967+
3968+ if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3969+ GEARMAN_COMMAND_CANT_DO,
3970+ args, args_size, 1) != GEARMAN_SUCCESS)
3971 {
3972 return TEST_FAILURE;
3973 }
3974@@ -158,52 +163,57 @@
3975
3976 gearman_con_free(&con);
3977
3978- if (gearman_con_create(&gearman, &con) == NULL)
3979+ if (gearman_add_con(&gearman, &con) == NULL)
3980 return TEST_FAILURE;
3981
3982 gearman_con_set_host(&con, NULL);
3983 gearman_con_set_port(&con, WORKER_TEST_PORT);
3984
3985- if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3986- GEARMAN_COMMAND_SET_CLIENT_ID,
3987- (uint8_t *)"testUnregisterFunction", 13,
3988- NULL) != GEARMAN_SUCCESS)
3989- {
3990- return TEST_FAILURE;
3991- }
3992-
3993- if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
3994- return TEST_FAILURE;
3995-
3996- gearman_packet_free(&packet);
3997-
3998- if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
3999- GEARMAN_COMMAND_CAN_DO, (uint8_t *)"digest", 6,
4000- NULL) != GEARMAN_SUCCESS)
4001- {
4002- return TEST_FAILURE;
4003- }
4004-
4005- if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
4006- return TEST_FAILURE;
4007-
4008- gearman_packet_free(&packet);
4009-
4010- if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
4011- GEARMAN_COMMAND_CAN_DO, (uint8_t *)"reverse", 7,
4012- NULL) != GEARMAN_SUCCESS)
4013- {
4014- return TEST_FAILURE;
4015- }
4016-
4017- if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
4018- return TEST_FAILURE;
4019-
4020- gearman_packet_free(&packet);
4021-
4022- if (gearman_packet_add(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
4023- GEARMAN_COMMAND_RESET_ABILITIES,
4024- NULL) != GEARMAN_SUCCESS)
4025+ args[0]= "testUnregisterFunction";
4026+ args_size[0]= strlen("testUnregisterFunction");
4027+ if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
4028+ GEARMAN_COMMAND_SET_CLIENT_ID,
4029+ args, args_size, 1) != GEARMAN_SUCCESS)
4030+ {
4031+ return TEST_FAILURE;
4032+ }
4033+
4034+ if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
4035+ return TEST_FAILURE;
4036+
4037+ gearman_packet_free(&packet);
4038+
4039+ args[0]= "digest";
4040+ args_size[0]= strlen("digest");
4041+ if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
4042+ GEARMAN_COMMAND_CAN_DO,
4043+ args, args_size, 1) != GEARMAN_SUCCESS)
4044+ {
4045+ return TEST_FAILURE;
4046+ }
4047+
4048+ if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
4049+ return TEST_FAILURE;
4050+
4051+ gearman_packet_free(&packet);
4052+
4053+ args[0]= "reverse";
4054+ args_size[0]= strlen("reverse");
4055+ if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
4056+ GEARMAN_COMMAND_CAN_DO,
4057+ args, args_size, 1) != GEARMAN_SUCCESS)
4058+ {
4059+ return TEST_FAILURE;
4060+ }
4061+
4062+ if (gearman_con_send(&con, &packet, true) != GEARMAN_SUCCESS)
4063+ return TEST_FAILURE;
4064+
4065+ gearman_packet_free(&packet);
4066+
4067+ if (gearman_add_packet_args(&gearman, &packet, GEARMAN_MAGIC_REQUEST,
4068+ GEARMAN_COMMAND_RESET_ABILITIES,
4069+ NULL, NULL, 0) != GEARMAN_SUCCESS)
4070 {
4071 return TEST_FAILURE;
4072 }

Subscribers

People subscribed via source and target branches

to all changes: