Fix multiple instances hang issue
This commit is contained in:
@@ -14,7 +14,7 @@ RUN apt -y install rapidjson-dev libboost-all-dev
|
||||
# libpcrecpp0v5 unixodbc-dev postgresql-server-dev-12 libgsoap-dev libgsoap-2.8.91
|
||||
|
||||
# DEBUG
|
||||
RUN apt -y install gdb strace vim
|
||||
RUN apt -y install gdb strace vim postgresql-client-11
|
||||
|
||||
ADD scripts/* /usr/local/bin/
|
||||
ADD configs/* /cfgs/
|
||||
@@ -32,4 +32,7 @@ RUN cd /opt/mainsite/wrenchboard/src && make
|
||||
|
||||
RUN ln -s /opt/mainsite/wrenchboard/src/modules/wrenchboard_api_root.so /usr/local/lib/php/extensions/no-debug-non-zts-20170718/wrenchboard_api_root.so
|
||||
|
||||
RUN touch /opt/mainsite/wrenchboard/logs/wrenchboard_api_root.log
|
||||
RUN chmod a+w /opt/mainsite/wrenchboard/logs/wrenchboard_api_root.log
|
||||
|
||||
RUN echo "extension=wrenchboard_api_root.so" > /usr/local/etc/php/conf.d/docker-php-ext-wrenchboard.ini
|
||||
|
||||
@@ -116,20 +116,28 @@ PHP_METHOD(WrenchBoard, wrenchboard_api)
|
||||
// Convert output
|
||||
convert_to_array_ex( param_out );
|
||||
CVars::iterator i;
|
||||
int j = 0;
|
||||
const int out_size = output.size(); // 200
|
||||
const int out_value_size = 200;
|
||||
char out_key[out_value_size], out_value[out_value_size];
|
||||
for ( i=output.begin(); i != output.end() && j<out_size ; i++ ) {
|
||||
bzero(out_key, out_value_size);
|
||||
bzero(out_value, out_value_size);
|
||||
j++;
|
||||
logfmt( logINFO, "RET: %s=%s", i->first.c_str(), i->second.c_str() );
|
||||
strsafecpy( out_key, i->first.c_str(), out_value_size );
|
||||
strsafecpy( out_value, i->second.c_str(), out_value_size );
|
||||
add_assoc_string( param_out, out_key, out_value);
|
||||
}
|
||||
|
||||
if (!output.empty()) {
|
||||
array_init(param_out);
|
||||
// for ( i=output.begin(); i != output.end() && j<out_size ; i++ ) {
|
||||
while (!output.empty()) {
|
||||
bzero(out_key, out_value_size);
|
||||
bzero(out_value, out_value_size);
|
||||
i = output.begin();
|
||||
logfmt( logINFO, "RET: %s=%s", i->first.c_str(), i->second.c_str() );
|
||||
strsafecpy( out_key, i->first.c_str(), out_value_size );
|
||||
strsafecpy( out_value, i->second.c_str(), out_value_size );
|
||||
//add_assoc_string( param_out, out_key, out_value);
|
||||
add_assoc_string_ex( param_out, out_key, strlen(out_key), out_value);
|
||||
//SAFE_STRING
|
||||
//efree(out_value);
|
||||
output.erase(output.begin());
|
||||
}
|
||||
}
|
||||
logfmt( logDEBUG, "About to return %ld", retval );
|
||||
RETURN_LONG(retval);
|
||||
}
|
||||
|
||||
|
||||
@@ -32,10 +32,14 @@ int pgsql_db_connect(const char*host,const char*name,const char*user,const char*
|
||||
connection_str+=pgsql_uitoa(port,pdb_port,10);
|
||||
}
|
||||
|
||||
//FILE_LOG(logSQL) << "PQconnectdb()";
|
||||
conn = PQconnectdb(connection_str.c_str());
|
||||
//FILE_LOG(logSQL) << "PQstatus()";
|
||||
if (PQstatus(conn) != CONNECTION_OK) {
|
||||
//FILE_LOG(logSQL) << "ERROR";
|
||||
return 0;
|
||||
}
|
||||
//FILE_LOG(logSQL) << "CONNECTION_OK";
|
||||
return 1;
|
||||
}
|
||||
|
||||
@@ -43,7 +47,11 @@ void pgsql_close()
|
||||
{
|
||||
FILE_LOG(logSQL) << "pgsql_close()";
|
||||
if (PQstatus(conn)==CONNECTION_OK) {
|
||||
//FILE_LOG(logSQL) << "PQstatus(conn) == CONNECTION_OK";
|
||||
PQfinish(conn);
|
||||
//FILE_LOG(logSQL) << "PQfinish() done!";
|
||||
} else {
|
||||
//FILE_LOG(logSQL) << "PQstatus(conn) != CONNECTION_OK";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,15 +8,17 @@
|
||||
|
||||
#include "wrenchboard_api_main.h"
|
||||
|
||||
#include <exception>
|
||||
#include <iostream>
|
||||
#include <libpq-fe.h>
|
||||
|
||||
WrenchBoard::WrenchBoard() {
|
||||
// Open config
|
||||
// Open log
|
||||
this->pFile = fopen(WRENCHBOARD_LOG, "a");
|
||||
Output2FILE::Stream() = pFile;
|
||||
FILE_LOG(logINFO) << "WRENCHBOARD is starting...";
|
||||
|
||||
// Read config
|
||||
CfgReadConfig();
|
||||
logfmt(logINFO, "Version from config: %s", CfgReadChar("version"));
|
||||
|
||||
@@ -31,10 +33,17 @@ WrenchBoard::WrenchBoard() {
|
||||
CfgReadChar("database.user"),
|
||||
CfgReadChar("database.pass"),
|
||||
CfgReadLong("database.port") );
|
||||
FILE_LOG(logDEBUG) << "pgsql_db_connect() done!";
|
||||
} catch (const std::exception &e) {
|
||||
FILE_LOG(logDEBUG) << "Exception: " << e.what();
|
||||
} catch (const std::string &e) {
|
||||
FILE_LOG(logDEBUG) << "Exception: " << e;
|
||||
} catch (const char *e) {
|
||||
FILE_LOG(logDEBUG) << "Exception: " << e;
|
||||
} catch (...) {
|
||||
logfmt(logDEBUG, "Exception!");
|
||||
FILE_LOG(logDEBUG) << "Unknown Exception!";
|
||||
}
|
||||
logfmt(logDEBUG, "Database connection %s", this->db>0?"successful":"failed");
|
||||
FILE_LOG(logDEBUG) << "Database connection " << (this->db>0?"successful":"failed");
|
||||
}
|
||||
|
||||
long WrenchBoard::wrenchboard_api(CVars in, CVars &out) {
|
||||
@@ -70,6 +79,6 @@ WrenchBoard::~WrenchBoard() {
|
||||
// Do we need it?
|
||||
if (this->pFile) {
|
||||
fclose(this->pFile);
|
||||
}
|
||||
} // */
|
||||
}
|
||||
|
||||
|
||||
@@ -116,19 +116,27 @@ PHP_METHOD(WrenchBoard, wrenchboard_api)
|
||||
// Convert output
|
||||
convert_to_array_ex( param_out );
|
||||
CVars::iterator i;
|
||||
int j = 0;
|
||||
const int out_size = output.size(); // 200
|
||||
const int out_value_size = 200;
|
||||
char out_key[out_value_size], out_value[out_value_size];
|
||||
for ( i=output.begin(); i != output.end() && j<out_size ; i++ ) {
|
||||
bzero(out_key, out_value_size);
|
||||
bzero(out_value, out_value_size);
|
||||
j++;
|
||||
logfmt( logINFO, "RET: %s=%s", i->first.c_str(), i->second.c_str() );
|
||||
strsafecpy( out_key, i->first.c_str(), out_value_size );
|
||||
strsafecpy( out_value, i->second.c_str(), out_value_size );
|
||||
add_assoc_string( param_out, out_key, out_value);
|
||||
if (!output.empty()) {
|
||||
array_init(param_out);
|
||||
// for ( i=output.begin(); i != output.end() && j<out_size ; i++ ) {
|
||||
while (!output.empty()) {
|
||||
bzero(out_key, out_value_size);
|
||||
bzero(out_value, out_value_size);
|
||||
i = output.begin();
|
||||
logfmt( logINFO, "RET: %s=%s", i->first.c_str(), i->second.c_str() );
|
||||
strsafecpy( out_key, i->first.c_str(), out_value_size );
|
||||
strsafecpy( out_value, i->second.c_str(), out_value_size );
|
||||
//add_assoc_string( param_out, out_key, out_value);
|
||||
add_assoc_string_ex( param_out, out_key, strlen(out_key), out_value);
|
||||
//SAFE_STRING
|
||||
//efree(out_value);
|
||||
output.erase(output.begin());
|
||||
}
|
||||
}
|
||||
logfmt( logDEBUG, "About to return %ld", retval );
|
||||
|
||||
RETURN_LONG(retval);
|
||||
}
|
||||
@@ -253,10 +261,10 @@ static void wrenchboard_object_free(zend_object *object)
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------ // ------------------------------------------------------------------
|
||||
PHP_MINIT_FUNCTION(wrenchboard_api_oameye)
|
||||
PHP_MINIT_FUNCTION(wrenchboard_api_root)
|
||||
{
|
||||
zend_class_entry ce;
|
||||
INIT_NS_CLASS_ENTRY(ce, WRENCHBOARD_API_OAMEYE_NS, "WrenchBoard", wrenchboard_methods);
|
||||
INIT_NS_CLASS_ENTRY(ce, WRENCHBOARD_API_ROOT_NS, "WrenchBoard", wrenchboard_methods);
|
||||
wrenchboard_ce = zend_register_internal_class(&ce TSRMLS_CC);
|
||||
wrenchboard_ce->create_object = wrenchboard_object_new;
|
||||
|
||||
@@ -277,7 +285,7 @@ PHP_MINIT_FUNCTION(wrenchboard_api_oameye)
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------ // ------------------------------------------------------------------
|
||||
PHP_MINFO_FUNCTION(wrenchboard_api_oameye)
|
||||
PHP_MINFO_FUNCTION(wrenchboard_api_root)
|
||||
{
|
||||
php_info_print_table_start();
|
||||
php_info_print_table_row(2, "WRENCHBOARD API support", "enabled");
|
||||
@@ -285,31 +293,31 @@ PHP_MINFO_FUNCTION(wrenchboard_api_oameye)
|
||||
php_info_print_table_row(2, "Config File", WRENCHBOARD_CONFIG"wrenchboard_api.conf");
|
||||
php_info_print_table_row(2, "Build Date", __DATE__);
|
||||
php_info_print_table_row(2, "Build Time", __TIME__);
|
||||
php_info_print_table_row(2, "Namespace", WRENCHBOARD_API_OAMEYE_NS);
|
||||
php_info_print_table_row(2, "Version", PHP_WRENCHBOARD_API_OAMEYE_EXTVER);
|
||||
php_info_print_table_row(2, "Namespace", WRENCHBOARD_API_ROOT_NS);
|
||||
php_info_print_table_row(2, "Version", PHP_WRENCHBOARD_API_ROOT_EXTVER);
|
||||
php_info_print_table_end();
|
||||
}
|
||||
|
||||
// ------------------------------------------------------------------ // ------------------------------------------------------------------
|
||||
zend_module_entry wrenchboard_api_oameye_module_entry = {
|
||||
zend_module_entry wrenchboard_api_root_module_entry = {
|
||||
#if ZEND_MODULE_API_NO >= 20010901
|
||||
STANDARD_MODULE_HEADER,
|
||||
#endif
|
||||
PHP_WRENCHBOARD_API_OAMEYE_EXTNAME,
|
||||
PHP_WRENCHBOARD_API_ROOT_EXTNAME,
|
||||
NULL, /* Functions */
|
||||
PHP_MINIT(wrenchboard_api_oameye),
|
||||
PHP_MINIT(wrenchboard_api_root),
|
||||
NULL, /* MSHUTDOWN */
|
||||
NULL, /* RINIT */
|
||||
NULL, /* RSHUTDOWN */
|
||||
PHP_MINFO(wrenchboard_api_oameye), /* MINFO */
|
||||
PHP_MINFO(wrenchboard_api_root), /* MINFO */
|
||||
#if ZEND_MODULE_API_NO >= 20010901
|
||||
PHP_WRENCHBOARD_API_OAMEYE_EXTVER,
|
||||
PHP_WRENCHBOARD_API_ROOT_EXTVER,
|
||||
#endif
|
||||
STANDARD_MODULE_PROPERTIES
|
||||
};
|
||||
|
||||
//#ifdef COMPILE_DL_WRENCHBOARD_API_OAMEYE
|
||||
//#ifdef COMPILE_DL_WRENCHBOARD_API_ROOT
|
||||
extern "C" {
|
||||
ZEND_GET_MODULE(wrenchboard_api_oameye)
|
||||
ZEND_GET_MODULE(wrenchboard_api_root)
|
||||
}
|
||||
//#endif
|
||||
|
||||
Reference in New Issue
Block a user