From b35e797a4073f97a1e9ea19181b66e9246be49a7 Mon Sep 17 00:00:00 2001 From: "Herman J. Radtke III" Date: Sun, 5 Aug 2012 21:31:30 -0700 Subject: [PATCH] Fixed PECL bug #60877 (no way to set client_id for a GearmanWorker) --- php-gearman.ini | 5 ++++ php_gearman.c | 29 ++++++++++++++++++++++ gearman_001.phpt => tests/gearman_001.phpt | 0 tests/gearman_002.phpt | 17 +++++++++++++ 4 files changed, 51 insertions(+) create mode 100644 php-gearman.ini rename gearman_001.phpt => tests/gearman_001.phpt (100%) create mode 100644 tests/gearman_002.phpt diff --git a/php-gearman.ini b/php-gearman.ini new file mode 100644 index 0000000..5193e5a --- /dev/null +++ b/php-gearman.ini @@ -0,0 +1,5 @@ +error_reporting = E_ALL + +display_startup_errors = On + +extension=modules/gearman.so diff --git a/php_gearman.c b/php_gearman.c index 82f1701..4fdef41 100644 --- a/php_gearman.c +++ b/php_gearman.c @@ -824,6 +824,15 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_oo_gearman_worker_set_timeout, 0, 0, 1) ZEND_ARG_INFO(0, timeout) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO_EX(arginfo_gearman_worker_set_id, 0, 0, 2) + ZEND_ARG_INFO(0, worker_object) + ZEND_ARG_INFO(0, id) +ZEND_END_ARG_INFO() + +ZEND_BEGIN_ARG_INFO_EX(arginfo_oo_gearman_worker_set_id, 0, 0, 1) + ZEND_ARG_INFO(0, id) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO_EX(arginfo_gearman_worker_add_server, 0, 0, 1) ZEND_ARG_INFO(0, worker_object) ZEND_ARG_INFO(0, host) @@ -3296,6 +3305,24 @@ PHP_FUNCTION(gearman_worker_set_timeout) { } /* }}} */ +/* {{{ proto void gearman_worker_set_id(object worker, string id) + Set id for a worker structure. */ +PHP_FUNCTION(gearman_worker_set_id) { + zval *zobj; + gearman_worker_obj *obj; + char *id; + int id_len; + + GEARMAN_ZPMP(RETURN_NULL(), "s", &zobj, gearman_worker_ce, &id, &id_len) + + if(gearman_failed(gearman_worker_set_identifier(&(obj->worker), id, id_len))) { + RETURN_FALSE; + } + + RETURN_TRUE; +} +/* }}} */ + /* {{{ proto bool gearman_worker_add_server(object worker [, string host [, int port ]]) Add a job server to a worker. This goes into a list of servers than can be used to run tasks. No socket I/O happens here, it is just added to a list. */ PHP_FUNCTION(gearman_worker_add_server) { @@ -4108,6 +4135,7 @@ zend_function_entry gearman_functions[] = { PHP_FE(gearman_worker_remove_options, arginfo_gearman_worker_remove_options) PHP_FE(gearman_worker_timeout, arginfo_gearman_worker_timeout) PHP_FE(gearman_worker_set_timeout, arginfo_gearman_worker_set_timeout) + PHP_FE(gearman_worker_set_id, arginfo_gearman_worker_set_id) #if jluedke_0 PHP_FE(gearman_worker_context, arginfo_gearman_worker_context) PHP_FE(gearman_worker_set_context, arginfo_gearman_worker_set_context) @@ -4279,6 +4307,7 @@ zend_function_entry gearman_worker_methods[]= { __PHP_ME_MAPPING(removeOptions, gearman_worker_remove_options, arginfo_oo_gearman_worker_remove_options, 0) __PHP_ME_MAPPING(timeout, gearman_worker_timeout, arginfo_oo_gearman_worker_timeout, 0) __PHP_ME_MAPPING(setTimeout, gearman_worker_set_timeout, arginfo_oo_gearman_worker_set_timeout, 0) + __PHP_ME_MAPPING(setId, gearman_worker_set_id, arginfo_oo_gearman_worker_set_id, 0) #if jluedke_0 __PHP_ME_MAPPING(context, gearman_worker_context, arginfo_oo_gearman_worker_context, 0) __PHP_ME_MAPPING(setContext, gearman_worker_set_context, arginfo_oo_gearman_worker_set_context, 0) diff --git a/gearman_001.phpt b/tests/gearman_001.phpt similarity index 100% rename from gearman_001.phpt rename to tests/gearman_001.phpt diff --git a/tests/gearman_002.phpt b/tests/gearman_002.phpt new file mode 100644 index 0000000..3fb291c --- /dev/null +++ b/tests/gearman_002.phpt @@ -0,0 +1,17 @@ +--TEST-- +gearman_worker_set_id() +--SKIPIF-- + +--FILE-- +setId('test'); + +$worker = gearman_worker_create(); +gearman_worker_set_id($worker, 'test'); + +echo "OK"; +?> +--EXPECT-- +OK