diff --git a/php_swoole.h b/php_swoole.h new file mode 100644 index 0000000..fb3437c --- /dev/null +++ b/php_swoole.h @@ -0,0 +1,67 @@ +/* + +----------------------------------------------------------------------+ + | Swoole | + +----------------------------------------------------------------------+ + | This source file is subject to version 2.0 of the Apache license, | + | that is bundled with this package in the file LICENSE, and is | + | available through the world-wide-web at the following url: | + | http://www.apache.org/licenses/LICENSE-2.0.html | + | If you did not receive a copy of the Apache2.0 license and are unable| + | to obtain it through the world-wide-web, please send a note to | + | license@swoole.com so we can mail you a copy immediately. | + +----------------------------------------------------------------------+ + | Author: Tianfeng Han | + +----------------------------------------------------------------------+ +*/ + +#ifndef PHP_SWOOLE_H +#define PHP_SWOOLE_H + +#include "php.h" +#include "php_ini.h" +#include "php_globals.h" +#include "php_main.h" + +#include "php_streams.h" +#include "php_network.h" + +#include "zend_variables.h" +#include "zend_interfaces.h" +#include "zend_closures.h" +#include "zend_exceptions.h" + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +extern zend_module_entry swoole_module_entry; +#define phpext_swoole_ptr &swoole_module_entry + +PHP_MINIT_FUNCTION(swoole); +PHP_MSHUTDOWN_FUNCTION(swoole); +PHP_RINIT_FUNCTION(swoole); +PHP_RSHUTDOWN_FUNCTION(swoole); +PHP_MINFO_FUNCTION(swoole); + +// clang-format off +ZEND_BEGIN_MODULE_GLOBALS(swoole) + zend_bool display_errors; + zend_bool cli; + zend_bool use_shortname; + zend_bool enable_coroutine; + zend_bool enable_preemptive_scheduler; + zend_bool enable_library; + long socket_buffer_size; + int req_status; +ZEND_END_MODULE_GLOBALS(swoole) +// clang-format on + +extern ZEND_DECLARE_MODULE_GLOBALS(swoole); + +#ifdef ZTS +#define SWOOLE_G(v) TSRMG(swoole_globals_id, zend_swoole_globals *, v) +#else +#define SWOOLE_G(v) (swoole_globals.v) +#endif + +#endif /* PHP_SWOOLE_H */ diff --git a/swoole_postgresql_coro.cc b/swoole_postgresql_coro.cc index c69d813..ccb0fb8 100644 --- a/swoole_postgresql_coro.cc +++ b/swoole_postgresql_coro.cc @@ -301,6 +301,17 @@ static void _php_pgsql_notice_handler(void *resource_id, const char *message) { } } +static void swoole_pgsql_check_and_register(void) { + php_swoole_check_reactor(); + + if (!swoole_event_isset_handler(PHP_SWOOLE_FD_POSTGRESQL)) { + swoole_event_set_handler(PHP_SWOOLE_FD_POSTGRESQL | SW_EVENT_READ, swoole_pgsql_coro_onRead); + swoole_event_set_handler(PHP_SWOOLE_FD_POSTGRESQL | SW_EVENT_WRITE, swoole_pgsql_coro_onWrite); + swoole_event_set_handler(PHP_SWOOLE_FD_POSTGRESQL | SW_EVENT_ERROR, swoole_pgsql_coro_onError); + } + +} + static PHP_METHOD(swoole_postgresql_coro, __construct) {} static PHP_METHOD(swoole_postgresql_coro, connect) { @@ -334,6 +345,8 @@ static PHP_METHOD(swoole_postgresql_coro, connect) { RETURN_FALSE; } + swoole_pgsql_check_and_register(); + /* php_swoole_check_reactor(); if (!swoole_event_isset_handler(PHP_SWOOLE_FD_POSTGRESQL)) { @@ -341,7 +354,7 @@ static PHP_METHOD(swoole_postgresql_coro, connect) { swoole_event_set_handler(PHP_SWOOLE_FD_POSTGRESQL | SW_EVENT_WRITE, swoole_pgsql_coro_onWrite); swoole_event_set_handler(PHP_SWOOLE_FD_POSTGRESQL | SW_EVENT_ERROR, swoole_pgsql_coro_onError); } - + */ object->socket = make_socket(fd, (enum swFd_type) PHP_SWOOLE_FD_POSTGRESQL); if (swoole_event_add(object->socket, SW_EVENT_WRITE) < 0) { php_swoole_fatal_error(E_WARNING, "swoole_event_add failed"); @@ -750,6 +763,8 @@ static PHP_METHOD(swoole_postgresql_coro, query) { pgsql = object->conn; object->object = ZEND_THIS; + swoole_pgsql_check_and_register(); + while ((pgsql_result = PQgetResult(pgsql))) { PQclear(pgsql_result); } @@ -789,6 +804,8 @@ static PHP_METHOD(swoole_postgresql_coro, prepare) { pgsql = object->conn; object->object = ZEND_THIS; + swoole_pgsql_check_and_register(); + is_non_blocking = PQisnonblocking(pgsql); if (is_non_blocking == 0 && PQsetnonblocking(pgsql, 1) == -1) { @@ -844,6 +861,7 @@ static PHP_METHOD(swoole_postgresql_coro, execute) { object->request_type = NORMAL_QUERY; pgsql = object->conn; object->object = ZEND_THIS; + swoole_pgsql_check_and_register(); is_non_blocking = PQisnonblocking(pgsql); @@ -1108,6 +1126,7 @@ static PHP_METHOD(swoole_postgresql_coro, metaData) { object->request_type = META_DATA; pgsql = object->conn; object->object = ZEND_THIS; + swoole_pgsql_check_and_register(); while ((pg_result = PQgetResult(pgsql))) { PQclear(pg_result);