1
0
mirror of https://github.com/stefanocasazza/ULib.git synced 2025-09-28 19:05:55 +08:00

various fix

This commit is contained in:
stefanocasazza 2016-02-01 14:52:57 +01:00
parent 78fb96cf41
commit 3d96832bcf
10 changed files with 196 additions and 176 deletions

View File

@ -199,6 +199,9 @@ extern U_EXPORT uclientimage_info u_clientimage_info;
} }
#endif #endif
#define U_PARALLELIZATION_CHILD 1
#define U_PARALLELIZATION_PARENT 2
#define U_http_info u_clientimage_info.http_info #define U_http_info u_clientimage_info.http_info
#define U_clientimage_flag u_clientimage_info.flag #define U_clientimage_flag u_clientimage_info.flag
#define U_http_method_list u_clientimage_info.http_method_list #define U_http_method_list u_clientimage_info.http_method_list

View File

@ -452,7 +452,7 @@ public:
U_INTERNAL_DUMP("U_ClientImage_parallelization = %d proc->child() = %b", U_INTERNAL_DUMP("U_ClientImage_parallelization = %d proc->child() = %b",
U_ClientImage_parallelization, proc->child()) U_ClientImage_parallelization, proc->child())
if (U_ClientImage_parallelization == 1) U_RETURN(true); // 1 => child of parallelization if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) U_RETURN(true);
U_RETURN(false); U_RETURN(false);
} }
@ -464,7 +464,7 @@ public:
U_INTERNAL_DUMP("U_ClientImage_parallelization = %d proc->parent() = %b", U_INTERNAL_DUMP("U_ClientImage_parallelization = %d proc->parent() = %b",
U_ClientImage_parallelization, proc->parent()) U_ClientImage_parallelization, proc->parent())
if (U_ClientImage_parallelization == 2) U_RETURN(true); // 2 => parent of parallelization if (U_ClientImage_parallelization == U_PARALLELIZATION_PARENT) U_RETURN(true);
U_RETURN(false); U_RETURN(false);
} }

View File

@ -1077,7 +1077,7 @@ void u_bind2cpu(cpu_set_t* cpuset, int n)
#endif #endif
} }
void u_switch_to_realtime_priority() void u_switch_to_realtime_priority(void)
{ {
#if !defined(U_SERVER_CAPTIVE_PORTAL) && defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING > 0) && (defined(HAVE_SCHED_H) || defined(HAVE_SYS_SCHED_H)) #if !defined(U_SERVER_CAPTIVE_PORTAL) && defined(_POSIX_PRIORITY_SCHEDULING) && (_POSIX_PRIORITY_SCHEDULING > 0) && (defined(HAVE_SCHED_H) || defined(HAVE_SYS_SCHED_H))
struct sched_param sp; struct sched_param sp;

View File

@ -485,7 +485,7 @@ void UClientImage_Base::handlerDelete()
"UEventFd::fd = %d socket->iSockDesc = %d " "UEventFd::fd = %d socket->iSockDesc = %d "
"UNotifier::num_connection = %d UNotifier::min_connection = %d " "UNotifier::num_connection = %d UNotifier::min_connection = %d "
"U_ClientImage_parallelization = %d sfd = %d UEventFd::op_mask = %B", "U_ClientImage_parallelization = %d sfd = %d UEventFd::op_mask = %B",
UEventFd::fd, socket->iSockDesc, UNotifier::num_connection, UNotifier::min_connection, UEventFd::fd, socket->iSockDesc, UNotifier::num_connection, UNotifier::min_connection,
U_ClientImage_parallelization, sfd, UEventFd::op_mask); U_ClientImage_parallelization, sfd, UEventFd::op_mask);
} }
# endif # endif
@ -681,10 +681,7 @@ void UClientImage_Base::endRequest()
// NB: URI requested can be URL encoded (ex: vuoto%2Etxt) so we cannot use snprintf()... // NB: URI requested can be URL encoded (ex: vuoto%2Etxt) so we cannot use snprintf()...
char buffer1[256], char buffer1[256];
buffer2[64];
uint32_t sz2 = 0;
char* ptr1 = buffer1; char* ptr1 = buffer1;
u__memcpy(ptr1, "request \"", U_CONSTANT_SIZE("request \""), __PRETTY_FUNCTION__); u__memcpy(ptr1, "request \"", U_CONSTANT_SIZE("request \""), __PRETTY_FUNCTION__);
@ -703,20 +700,26 @@ void UClientImage_Base::endRequest()
u__memcpy(ptr1, "\" run in ", U_CONSTANT_SIZE("\" run in "), __PRETTY_FUNCTION__); u__memcpy(ptr1, "\" run in ", U_CONSTANT_SIZE("\" run in "), __PRETTY_FUNCTION__);
ptr1 += U_CONSTANT_SIZE("\" run in "); ptr1 += U_CONSTANT_SIZE("\" run in ");
int cpu = U_SYSCALL_NO_PARAM(sched_getcpu); if (time_run > 0L) ptr1 += u__snprintf(ptr1, sizeof(buffer1)-(ptr1-buffer1), "%ld ms", time_run);
else ptr1 += u__snprintf(ptr1, sizeof(buffer1)-(ptr1-buffer1), "%g ms", chronometer->getTimeElapsed());
U_INTERNAL_DUMP("cpu = %d USocket::incoming_cpu = %d", cpu, USocket::incoming_cpu) if (UServer_Base::csocket->isOpen())
# ifdef SO_INCOMING_CPU
if (USocket::incoming_cpu != cpu &&
USocket::incoming_cpu != -1)
{ {
sz2 = u__snprintf(buffer2, sizeof(buffer2), " (EXPECTED CPU %d)", USocket::incoming_cpu); uint32_t len = 0;
} int cpu = U_SYSCALL_NO_PARAM(sched_getcpu), scpu = -1;
# endif
if (time_run > 0L) ptr1 += u__snprintf(ptr1, sizeof(buffer1)-(ptr1-buffer1), "%ld ms on cpu %d%.*s", time_run, cpu, sz2, buffer2); # ifdef SO_INCOMING_CPU
else ptr1 += u__snprintf(ptr1, sizeof(buffer1)-(ptr1-buffer1), "%g ms on cpu %d%.*s", chronometer->getTimeElapsed(), cpu, sz2, buffer2); len = sizeof(socklen_t);
(void) UServer_Base::csocket->getSockOpt(SOL_SOCKET, SO_INCOMING_CPU, (void*)&scpu, len);
len = ((USocket::incoming_cpu == scpu || USocket::incoming_cpu == -1) ? 0 : U_CONSTANT_SIZE(" [DIFFER]"));
# endif
U_INTERNAL_DUMP("USocket::incoming_cpu = %d sched cpu = %d socket cpu = %d", USocket::incoming_cpu, cpu, scpu)
if (len) ptr1 += u__snprintf(ptr1, sizeof(buffer1)-(ptr1-buffer1), ", CPU: %d sched(%d) socket(%d)%.*s", USocket::incoming_cpu, cpu, scpu, len, " [DIFFER]");
}
U_INTERNAL_ASSERT_MINOR((ptrdiff_t)(ptr1-buffer1), (ptrdiff_t)sizeof(buffer1)) U_INTERNAL_ASSERT_MINOR((ptrdiff_t)(ptr1-buffer1), (ptrdiff_t)sizeof(buffer1))
@ -862,7 +865,7 @@ void UClientImage_Base::prepareForRead()
{ {
U_ASSERT(UServer_Base::proc->child()) U_ASSERT(UServer_Base::proc->child())
U_ClientImage_parallelization = 1; // 1 => child of parallelization U_ClientImage_parallelization = U_PARALLELIZATION_CHILD;
} }
#endif #endif
@ -1011,7 +1014,7 @@ start:
if (genericRead() == false) if (genericRead() == false)
{ {
if (U_ClientImage_state == U_PLUGIN_HANDLER_AGAIN && if (U_ClientImage_state == U_PLUGIN_HANDLER_AGAIN &&
U_ClientImage_parallelization != 1) // 1 => child of parallelization U_ClientImage_parallelization != U_PARALLELIZATION_CHILD)
{ {
U_INTERNAL_ASSERT(socket->isOpen()) U_INTERNAL_ASSERT(socket->isOpen())
@ -1076,7 +1079,7 @@ pipeline:
dmiss: dmiss:
U_INTERNAL_DUMP("U_ClientImage_parallelization = %d", U_ClientImage_parallelization) U_INTERNAL_DUMP("U_ClientImage_parallelization = %d", U_ClientImage_parallelization)
if (U_ClientImage_parallelization == 1) // 1 => child of parallelization if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD)
{ {
if (UNotifier::waitForRead(UServer_Base::csocket->iSockDesc, U_TIMEOUT_MS) != 1 || if (UNotifier::waitForRead(UServer_Base::csocket->iSockDesc, U_TIMEOUT_MS) != 1 ||
(resetReadBuffer(), USocketExt::read(UServer_Base::csocket, *rbuffer, getCountToRead(), 0)) == false) (resetReadBuffer(), USocketExt::read(UServer_Base::csocket, *rbuffer, getCountToRead(), 0)) == false)
@ -1111,7 +1114,7 @@ dmiss:
U_INTERNAL_DUMP("data_pending(%u) = %V", data_pending->size(), data_pending->rep) U_INTERNAL_DUMP("data_pending(%u) = %V", data_pending->size(), data_pending->rep)
U_INTERNAL_ASSERT(socket->isOpen()) U_INTERNAL_ASSERT(socket->isOpen())
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 1) // 1 => child of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_CHILD)
U_RETURN(U_NOTIFIER_OK); U_RETURN(U_NOTIFIER_OK);
} }
@ -1272,7 +1275,7 @@ processing:
if (isRequestNeedProcessing()) if (isRequestNeedProcessing())
{ {
U_INTERNAL_ASSERT_POINTER(callerHandlerRequest) U_INTERNAL_ASSERT_POINTER(callerHandlerRequest)
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 2) // 2 => parent of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_PARENT)
U_INTERNAL_ASSERT_EQUALS(U_ClientImage_state & (U_PLUGIN_HANDLER_AGAIN | U_PLUGIN_HANDLER_ERROR), 0) U_INTERNAL_ASSERT_EQUALS(U_ClientImage_state & (U_PLUGIN_HANDLER_AGAIN | U_PLUGIN_HANDLER_ERROR), 0)
U_ClientImage_state = callerHandlerRequest(); U_ClientImage_state = callerHandlerRequest();
@ -1291,7 +1294,7 @@ processing:
U_INTERNAL_DUMP("U_http_info.nResponseCode = %u count = %u UEventFd::op_mask = %d %B", U_INTERNAL_DUMP("U_http_info.nResponseCode = %u count = %u UEventFd::op_mask = %d %B",
U_http_info.nResponseCode, count, UEventFd::op_mask, UEventFd::op_mask) U_http_info.nResponseCode, count, UEventFd::op_mask, UEventFd::op_mask)
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 2) // 2 => parent of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_PARENT)
if (count == 0) if (count == 0)
{ {
@ -1377,14 +1380,14 @@ error:
if (U_ClientImage_close) if (U_ClientImage_close)
{ {
end: if (U_ClientImage_parallelization == 1) goto death; // 1 => child of parallelization end: if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) goto death;
U_RETURN(U_NOTIFIER_DELETE); U_RETURN(U_NOTIFIER_DELETE);
} }
// NB: maybe we have some more request to services on the same connection... // NB: maybe we have some more request to services on the same connection...
if (U_ClientImage_parallelization == 1) if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD)
{ {
U_INTERNAL_ASSERT_DIFFERS(socket->iSockDesc, -1) U_INTERNAL_ASSERT_DIFFERS(socket->iSockDesc, -1)
@ -1397,7 +1400,7 @@ death:
last_event = u_now->tv_sec; last_event = u_now->tv_sec;
U_INTERNAL_ASSERT(socket->isOpen()) U_INTERNAL_ASSERT(socket->isOpen())
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 1) // 1 => child of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_CHILD)
U_INTERNAL_DUMP("request(%u) = %V", request->size(), request->rep); U_INTERNAL_DUMP("request(%u) = %V", request->size(), request->rep);
@ -1412,7 +1415,7 @@ bool UClientImage_Base::writeResponse()
U_INTERNAL_ASSERT(*wbuffer) U_INTERNAL_ASSERT(*wbuffer)
U_INTERNAL_ASSERT(socket->isOpen()) U_INTERNAL_ASSERT(socket->isOpen())
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 2) // 2 => parent of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_PARENT)
int iBytesWrite; int iBytesWrite;
uint32_t sz1 = wbuffer->size(), uint32_t sz1 = wbuffer->size(),
@ -1567,7 +1570,7 @@ loop:
#endif #endif
{ {
#ifdef U_CLIENT_RESPONSE_PARTIAL_WRITE_SUPPORT #ifdef U_CLIENT_RESPONSE_PARTIAL_WRITE_SUPPORT
if (U_ClientImage_parallelization != 1) goto end; // 1 => child of parallelization if (U_ClientImage_parallelization != U_PARALLELIZATION_CHILD) goto end;
#endif #endif
} }
@ -1589,7 +1592,7 @@ loop:
if (iBytesWrite > 0) if (iBytesWrite > 0)
{ {
if (UServer_Base::bssl || if (UServer_Base::bssl ||
U_ClientImage_parallelization == 1) // NB: we must not have pending write... U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) // NB: we must not have pending write...
{ {
if (bflag == false) if (bflag == false)
{ {
@ -1701,7 +1704,7 @@ int UClientImage_Base::handlerResponse()
if (socket->isOpen()) if (socket->isOpen())
{ {
U_INTERNAL_ASSERT_EQUALS(UServer_Base::bssl, false) U_INTERNAL_ASSERT_EQUALS(UServer_Base::bssl, false)
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 1) // NB: we must not have pending write... U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_CHILD) // NB: we must not have pending write...
U_INTERNAL_ASSERT_EQUALS(UEventFd::op_mask, EPOLLIN | EPOLLRDHUP | EPOLLET) U_INTERNAL_ASSERT_EQUALS(UEventFd::op_mask, EPOLLIN | EPOLLRDHUP | EPOLLET)
# ifndef U_CLIENT_RESPONSE_PARTIAL_WRITE_SUPPORT # ifndef U_CLIENT_RESPONSE_PARTIAL_WRITE_SUPPORT
@ -1802,8 +1805,8 @@ write:
# ifdef DEBUG # ifdef DEBUG
else else
{ {
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 2) // 2 => parent of parallelization
U_INTERNAL_ASSERT_EQUALS(UEventFd::op_mask, EPOLLIN | EPOLLRDHUP | EPOLLET) U_INTERNAL_ASSERT_EQUALS(UEventFd::op_mask, EPOLLIN | EPOLLRDHUP | EPOLLET)
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_PARENT)
} }
# endif # endif
@ -1829,7 +1832,7 @@ write:
if (bwrite) U_RETURN(U_NOTIFIER_OK); if (bwrite) U_RETURN(U_NOTIFIER_OK);
if (U_ClientImage_parallelization == 1) // 1 => child of parallelization if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD)
{ {
wait: if (UNotifier::waitForWrite(socket->iSockDesc, U_TIMEOUT_MS) == 1) goto write; wait: if (UNotifier::waitForWrite(socket->iSockDesc, U_TIMEOUT_MS) == 1) goto write;
@ -1845,7 +1848,7 @@ wait: if (UNotifier::waitForWrite(socket->iSockDesc, U_TIMEOUT_MS) == 1) goto
U_RETURN(U_NOTIFIER_DELETE); U_RETURN(U_NOTIFIER_DELETE);
} }
if (U_ClientImage_parallelization == 1) goto wait; // 1 => child of parallelization if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD) goto wait;
prepareForSendfile(); prepareForSendfile();

View File

@ -278,7 +278,7 @@ U_NO_EXPORT bool USSIPlugIn::callService(const UString& name, const UString& val
if (result == false || if (result == false ||
alternative_response || alternative_response ||
U_ClientImage_parallelization == 2) // 2 => parent of parallelization U_ClientImage_parallelization == U_PARALLELIZATION_PARENT)
{ {
alternative_response = 1; // 1 => response already complete (nothing to do) alternative_response = 1; // 1 => response already complete (nothing to do)

View File

@ -1841,59 +1841,59 @@ int UServer_Base::pluginsHandler##xxx() \
U_RETURN(U_PLUGIN_HANDLER_FINISHED); \ U_RETURN(U_PLUGIN_HANDLER_FINISHED); \
} }
#else #else
# define U_PLUGIN_HANDLER(xxx) \ # define U_PLUGIN_HANDLER(xxx) \
int UServer_Base::pluginsHandler##xxx() \ int UServer_Base::pluginsHandler##xxx() \
{ \ { \
U_TRACE_NO_PARAM(0, "UServer_Base::pluginsHandler"#xxx"()") \ U_TRACE_NO_PARAM(0, "UServer_Base::pluginsHandler"#xxx"()") \
\ \
U_INTERNAL_ASSERT_POINTER(vplugin) \ U_INTERNAL_ASSERT_POINTER(vplugin) \
U_INTERNAL_ASSERT_MAJOR(vplugin_size, 0) \ U_INTERNAL_ASSERT_MAJOR(vplugin_size, 0) \
\ \
int result; \ int result; \
uint32_t i = 0; \ uint32_t i = 0; \
const char* fmt; \ const char* fmt; \
UServerPlugIn* _plugin; \ UServerPlugIn* _plugin; \
\ \
do { \ do { \
_plugin = vplugin->at(i); \ _plugin = vplugin->at(i); \
\ \
if (isLog() == false) result = _plugin->handler##xxx(); \ if (isLog() == false) result = _plugin->handler##xxx(); \
else \ else \
{ \ { \
UString name = vplugin_name->at(i); \ UString name = vplugin_name->at(i); \
\ \
(void)u__snprintf(mod_name[0],sizeof(mod_name[0]),"[%v] ",name.rep); \ (void)u__snprintf(mod_name[0],sizeof(mod_name[0]),"[%v] ",name.rep); \
\ \
result = _plugin->handler##xxx(); \ result = _plugin->handler##xxx(); \
\ \
if ((result & (U_PLUGIN_HANDLER_ERROR | \ if ((result & (U_PLUGIN_HANDLER_ERROR | \
U_PLUGIN_HANDLER_PROCESSED)) != 0) \ U_PLUGIN_HANDLER_PROCESSED)) != 0) \
{ \ { \
if ((result & U_PLUGIN_HANDLER_ERROR) != 0) \ if ((result & U_PLUGIN_HANDLER_ERROR) != 0) \
{ \ { \
fmt = ((result & U_PLUGIN_HANDLER_FINISHED) != 0 \ fmt = ((result & U_PLUGIN_HANDLER_FINISHED) != 0 \
? 0 \ ? 0 \
: "%sWARNING: "#xxx" phase of plugin %v failed"); \ : "%sWARNING: "#xxx" phase of plugin %v failed"); \
} \ } \
else \ else \
{ \ { \
fmt = (U_ClientImage_parallelization == 2 || \ fmt = (U_ClientImage_parallelization == U_PARALLELIZATION_PARENT || \
(result & U_PLUGIN_HANDLER_PROCESSED) == 0 \ (result & U_PLUGIN_HANDLER_PROCESSED) == 0 \
? 0 \ ? 0 \
: "%s"#xxx" phase of plugin %v success"); \ : "%s"#xxx" phase of plugin %v success"); \
} \ } \
\ \
if (fmt) ULog::log(fmt, mod_name[0], name.rep); \ if (fmt) ULog::log(fmt, mod_name[0], name.rep); \
} \ } \
\ \
mod_name[0][0] = '\0'; \ mod_name[0][0] = '\0'; \
} \ } \
\ \
if ((result & U_PLUGIN_HANDLER_GO_ON) == 0) U_RETURN(result); \ if ((result & U_PLUGIN_HANDLER_GO_ON) == 0) U_RETURN(result); \
} \ } \
while (++i < vplugin_size); \ while (++i < vplugin_size); \
\ \
U_RETURN(U_PLUGIN_HANDLER_FINISHED); \ U_RETURN(U_PLUGIN_HANDLER_FINISHED); \
} }
#endif #endif
@ -1924,59 +1924,59 @@ int UServer_Base::pluginsHandler##xxx() \
while (true); \ while (true); \
} }
#else #else
# define U_PLUGIN_HANDLER_REVERSE(xxx) \ # define U_PLUGIN_HANDLER_REVERSE(xxx) \
int UServer_Base::pluginsHandler##xxx() \ int UServer_Base::pluginsHandler##xxx() \
{ \ { \
U_TRACE_NO_PARAM(0, "UServer_Base::pluginsHandler"#xxx"()") \ U_TRACE_NO_PARAM(0, "UServer_Base::pluginsHandler"#xxx"()") \
\ \
U_INTERNAL_ASSERT_POINTER(vplugin) \ U_INTERNAL_ASSERT_POINTER(vplugin) \
U_INTERNAL_ASSERT_MAJOR(vplugin_size, 0) \ U_INTERNAL_ASSERT_MAJOR(vplugin_size, 0) \
\ \
int result; \ int result; \
const char* fmt; \ const char* fmt; \
UServerPlugIn* _plugin; \ UServerPlugIn* _plugin; \
uint32_t i = vplugin_size; \ uint32_t i = vplugin_size; \
\ \
do { \ do { \
_plugin = vplugin->at(--i); \ _plugin = vplugin->at(--i); \
\ \
if (isLog() == false) result = _plugin->handler##xxx(); \ if (isLog() == false) result = _plugin->handler##xxx(); \
else \ else \
{ \ { \
UString name = vplugin_name->at(i); \ UString name = vplugin_name->at(i); \
\ \
(void)u__snprintf(mod_name[0],sizeof(mod_name[0]),"[%v] ",name.rep); \ (void)u__snprintf(mod_name[0],sizeof(mod_name[0]),"[%v] ",name.rep); \
\ \
result = _plugin->handler##xxx(); \ result = _plugin->handler##xxx(); \
\ \
if ((result & (U_PLUGIN_HANDLER_ERROR | \ if ((result & (U_PLUGIN_HANDLER_ERROR | \
U_PLUGIN_HANDLER_PROCESSED)) != 0) \ U_PLUGIN_HANDLER_PROCESSED)) != 0) \
{ \ { \
if ((result & U_PLUGIN_HANDLER_ERROR) != 0) \ if ((result & U_PLUGIN_HANDLER_ERROR) != 0) \
{ \ { \
fmt = ((result & U_PLUGIN_HANDLER_FINISHED) != 0 \ fmt = ((result & U_PLUGIN_HANDLER_FINISHED) != 0 \
? 0 \ ? 0 \
: "%sWARNING: "#xxx" phase of plugin %v failed"); \ : "%sWARNING: "#xxx" phase of plugin %v failed"); \
} \ } \
else \ else \
{ \ { \
fmt = (U_ClientImage_parallelization == 2 || \ fmt = (U_ClientImage_parallelization == U_PARALLELIZATION_PARENT || \
(result & U_PLUGIN_HANDLER_PROCESSED) == 0 \ (result & U_PLUGIN_HANDLER_PROCESSED) == 0 \
? 0 \ ? 0 \
: "%s"#xxx" phase of plugin %v success"); \ : "%s"#xxx" phase of plugin %v success"); \
} \ } \
\ \
if (fmt) ULog::log(fmt, mod_name[0], name.rep); \ if (fmt) ULog::log(fmt, mod_name[0], name.rep); \
} \ } \
\ \
mod_name[0][0] = '\0'; \ mod_name[0][0] = '\0'; \
} \ } \
\ \
if ((result & U_PLUGIN_HANDLER_GO_ON) == 0) U_RETURN(result); \ if ((result & U_PLUGIN_HANDLER_GO_ON) == 0) U_RETURN(result); \
\ \
if (i == 0) U_RETURN(U_PLUGIN_HANDLER_FINISHED); \ if (i == 0) U_RETURN(U_PLUGIN_HANDLER_FINISHED); \
} \ } \
while (true); \ while (true); \
} }
#endif #endif
@ -2749,7 +2749,7 @@ int UServer_Base::handlerRead() // This method is called to accept a new connect
loop: loop:
U_INTERNAL_ASSERT_MINOR(CLIENT_INDEX, eClientImage) U_INTERNAL_ASSERT_MINOR(CLIENT_INDEX, eClientImage)
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 1) // 1 => child of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_CHILD)
CSOCKET = CLIENT_INDEX->socket; CSOCKET = CLIENT_INDEX->socket;
@ -2847,7 +2847,7 @@ try_next:
try_accept: try_accept:
U_INTERNAL_ASSERT(CSOCKET->isClosed()) U_INTERNAL_ASSERT(CSOCKET->isClosed())
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 1) // 1 => child of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_CHILD)
if (socket->acceptClient(CSOCKET) == false) if (socket->acceptClient(CSOCKET) == false)
{ {
@ -3064,20 +3064,28 @@ retry: pid = UProcess::waitpid(-1, &status, WNOHANG); // NB: to avoid too much
else else
#endif #endif
{ {
#if defined(SO_INCOMING_CPU) && defined(DEBUG) #ifdef DEBUG
int cpu; uint32_t len = 0;
uint32_t len = sizeof(socklen_t); int cpu = U_SYSCALL_NO_PARAM(sched_getcpu), scpu = -1;
(void) CSOCKET->getSockOpt(SOL_SOCKET, SO_INCOMING_CPU, (void*)&cpu, len); # ifdef SO_INCOMING_CPU
len = sizeof(socklen_t);
U_INTERNAL_DUMP("cpu = %d USocket::incoming_cpu = %d", cpu, USocket::incoming_cpu) (void) CSOCKET->getSockOpt(SOL_SOCKET, SO_INCOMING_CPU, (void*)&scpu, len);
len = ((USocket::incoming_cpu == scpu || USocket::incoming_cpu == -1) ? 0 : U_CONSTANT_SIZE(" [DIFFER]"));
# endif
U_INTERNAL_DUMP("USocket::incoming_cpu = %d sched cpu = %d socket cpu = %d", USocket::incoming_cpu, cpu, scpu)
if (len) U_DEBUG("UServer_Base::handlerRead(): CPU: %d sched(%d) socket(%d)%.*s", USocket::incoming_cpu, cpu, scpu, len, " [DIFFER]");
#endif #endif
if (CLIENT_IMAGE_HANDLER_READ == false) goto next; if (CLIENT_IMAGE_HANDLER_READ == false) goto next;
} }
U_INTERNAL_ASSERT(CSOCKET->isOpen()) U_INTERNAL_ASSERT(CSOCKET->isOpen())
U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, 1) // 1 => child of parallelization U_INTERNAL_ASSERT_DIFFERS(U_ClientImage_parallelization, U_PARALLELIZATION_CHILD)
#if defined(HAVE_EPOLL_CTL_BATCH) && !defined(USE_LIBEVENT) #if defined(HAVE_EPOLL_CTL_BATCH) && !defined(USE_LIBEVENT)
UNotifier::batch((UEventFd*)CLIENT_INDEX); UNotifier::batch((UEventFd*)CLIENT_INDEX);
@ -3415,12 +3423,12 @@ no_monitoring_process:
UTimeVal to_sleep(0L, 500L * 1000L); UTimeVal to_sleep(0L, 500L * 1000L);
# if defined(HAVE_SCHED_GETAFFINITY) && !defined(U_SERVER_CAPTIVE_PORTAL) # if defined(HAVE_SCHED_GETAFFINITY) && !defined(U_SERVER_CAPTIVE_PORTAL)
if (preforked_num_kids <= u_get_num_cpu() && if (u_get_num_cpu() > 1 &&
u_num_cpu > 1) (preforked_num_kids % u_num_cpu) == 0)
{ {
baffinity = true; baffinity = true;
U_SRV_LOG("cpu affinity is to be set; thread count (%d) <= cpu count (%d)", preforked_num_kids, u_num_cpu); U_SRV_LOG("cpu affinity is to be set; thread count (%u) multiple of cpu count (%u)", preforked_num_kids, u_num_cpu);
} }
# endif # endif
@ -3428,7 +3436,7 @@ no_monitoring_process:
nkids = (preforked_num_kids <= 0 ? 1 : (pid_to_wait = -1, preforked_num_kids)); nkids = (preforked_num_kids <= 0 ? 1 : (pid_to_wait = -1, preforked_num_kids));
U_INTERNAL_DUMP("nkids = %d", nkids) U_INTERNAL_DUMP("nkids = %u", nkids)
while (flag_loop) while (flag_loop)
{ {
@ -3455,23 +3463,27 @@ no_monitoring_process:
# ifndef U_SERVER_CAPTIVE_PORTAL # ifndef U_SERVER_CAPTIVE_PORTAL
if (baffinity) if (baffinity)
{ {
int cpu;
char buffer[64];
uint32_t sz = 0;
CPU_ZERO(&cpuset); CPU_ZERO(&cpuset);
u_bind2cpu(&cpuset, rkids); // Pin the process to a particular cpu... u_bind2cpu(&cpuset, rkids % u_num_cpu); // Pin the process to a particular cpu...
# ifdef SO_INCOMING_CPU # if !defined(U_LOG_DISABLE) || defined(HAVE_SCHED_GETCPU)
USocket::incoming_cpu = rkids; uint32_t sz;
char buffer[64];
int cpu = U_SYSCALL_NO_PARAM(sched_getcpu);
# endif # endif
cpu = U_SYSCALL_NO_PARAM(sched_getcpu); # ifdef SO_INCOMING_CPU
USocket::incoming_cpu = rkids % u_num_cpu;
# endif
# ifdef HAVE_SCHED_GETCPU # ifdef HAVE_SCHED_GETCPU
if (USocket::incoming_cpu != cpu && if (USocket::incoming_cpu == cpu ||
USocket::incoming_cpu != -1) USocket::incoming_cpu == -1)
{
sz = 0;
}
else
{ {
sz = u__snprintf(buffer, sizeof(buffer), " (EXPECTED CPU %d)", USocket::incoming_cpu); sz = u__snprintf(buffer, sizeof(buffer), " (EXPECTED CPU %d)", USocket::incoming_cpu);
} }
@ -3688,7 +3700,7 @@ __pure bool UServer_Base::isParallelizationGoingToStart(uint32_t nclient)
U_ClientImage_pipeline, U_ClientImage_parallelization, UNotifier::num_connection - UNotifier::min_connection) U_ClientImage_pipeline, U_ClientImage_parallelization, UNotifier::num_connection - UNotifier::min_connection)
#ifndef U_SERVER_CAPTIVE_PORTAL #ifndef U_SERVER_CAPTIVE_PORTAL
if (U_ClientImage_parallelization != 1 && // 1 => child of parallelization if (U_ClientImage_parallelization != U_PARALLELIZATION_CHILD &&
(UNotifier::num_connection - UNotifier::min_connection) > nclient) (UNotifier::num_connection - UNotifier::min_connection) > nclient)
{ {
U_INTERNAL_DUMP("U_ClientImage_close = %b", U_ClientImage_close) U_INTERNAL_DUMP("U_ClientImage_close = %b", U_ClientImage_close)
@ -3713,7 +3725,7 @@ bool UServer_Base::startParallelization(uint32_t nclient)
// NB: from now it is responsability of the child to services the request from the client on the same connection... // NB: from now it is responsability of the child to services the request from the client on the same connection...
U_ClientImage_close = true; U_ClientImage_close = true;
U_ClientImage_parallelization = 2; // 2 => parent of parallelization U_ClientImage_parallelization = U_PARALLELIZATION_PARENT;
UClientImage_Base::setRequestProcessed(); UClientImage_Base::setRequestProcessed();
@ -3726,7 +3738,7 @@ bool UServer_Base::startParallelization(uint32_t nclient)
if (pid == 0) if (pid == 0)
{ {
U_ClientImage_parallelization = 1; // 1 => child of parallelization U_ClientImage_parallelization = U_PARALLELIZATION_CHILD;
U_ASSERT(isParallelizationChild()) U_ASSERT(isParallelizationChild())
} }

View File

@ -599,7 +599,9 @@ void USocket::reusePort(int _flags)
} }
#endif #endif
#ifndef U_COVERITY_FALSE_POSITIVE // USE_AFTER_FREE
setFlags(_flags); setFlags(_flags);
#endif
} }
void USocket::setRemote() void USocket::setRemote()
@ -940,7 +942,7 @@ void USocket::closesocket()
U_INTERNAL_DUMP("U_ClientImage_parallelization = %u", U_ClientImage_parallelization) U_INTERNAL_DUMP("U_ClientImage_parallelization = %u", U_ClientImage_parallelization)
if (U_ClientImage_parallelization == 1) // 1 => child of parallelization if (U_ClientImage_parallelization == U_PARALLELIZATION_CHILD)
{ {
iSockDesc = -1; iSockDesc = -1;

View File

@ -109,7 +109,7 @@ error: U_INTERNAL_DUMP("errno = %d", errno)
if (errno != EAGAIN) if (errno != EAGAIN)
{ {
if (U_ClientImage_parallelization != 1) // 1 => child of parallelization if (U_ClientImage_parallelization != U_PARALLELIZATION_CHILD)
{ {
if (errno != ECONNRESET && if (errno != ECONNRESET &&
sk == UServer_Base::csocket) sk == UServer_Base::csocket)
@ -143,7 +143,7 @@ error: U_INTERNAL_DUMP("errno = %d", errno)
{ {
U_INTERNAL_DUMP("byte_read = %d errno = %d", byte_read, errno) U_INTERNAL_DUMP("byte_read = %d errno = %d", byte_read, errno)
if (U_ClientImage_parallelization != 1) sk->abortive_close(); // 1 => child of parallelization if (U_ClientImage_parallelization != U_PARALLELIZATION_CHILD) sk->abortive_close();
U_RETURN(false); U_RETURN(false);
} }

View File

@ -3024,8 +3024,8 @@ next: U_DUMP("UServer_Base::isParallelizationChild() = %b UServer_Base::isParall
U_INTERNAL_DUMP("U_http_info.nResponseCode = %d UClientImage_Base::wbuffer(%u) = %V UClientImage_Base::body(%u) = %V", U_INTERNAL_DUMP("U_http_info.nResponseCode = %d UClientImage_Base::wbuffer(%u) = %V UClientImage_Base::body(%u) = %V",
U_http_info.nResponseCode, UClientImage_Base::wbuffer->size(), UClientImage_Base::wbuffer->rep, UClientImage_Base::body->size(), UClientImage_Base::body->rep) U_http_info.nResponseCode, UClientImage_Base::wbuffer->size(), UClientImage_Base::wbuffer->rep, UClientImage_Base::body->size(), UClientImage_Base::body->rep)
if (set_environment == false || if (set_environment == false ||
(U_ClientImage_parallelization != 2 && // 2 => parent of parallelization (U_ClientImage_parallelization != U_PARALLELIZATION_PARENT &&
processCGIOutput(cgi->environment_type == U_SHELL, false))) processCGIOutput(cgi->environment_type == U_SHELL, false)))
{ {
U_RETURN(true); U_RETURN(true);
@ -3101,7 +3101,7 @@ next:
U_DUMP("UServer_Base::isParallelizationChild() = %b UServer_Base::isParallelizationParent() = %b", U_DUMP("UServer_Base::isParallelizationChild() = %b UServer_Base::isParallelizationParent() = %b",
UServer_Base::isParallelizationChild(), UServer_Base::isParallelizationParent()) UServer_Base::isParallelizationChild(), UServer_Base::isParallelizationParent())
if (U_ClientImage_parallelization != 2) // 2 => parent of parallelization if (U_ClientImage_parallelization != U_PARALLELIZATION_PARENT)
{ {
U_INTERNAL_DUMP("U_http_info.nResponseCode = %d UClientImage_Base::wbuffer(%u) = %V UClientImage_Base::body(%u) = %V", U_INTERNAL_DUMP("U_http_info.nResponseCode = %d UClientImage_Base::wbuffer(%u) = %V UClientImage_Base::body(%u) = %V",
U_http_info.nResponseCode, UClientImage_Base::wbuffer->size(), UClientImage_Base::wbuffer->rep, UClientImage_Base::body->size(), UClientImage_Base::body->rep) U_http_info.nResponseCode, UClientImage_Base::wbuffer->size(), UClientImage_Base::wbuffer->rep, UClientImage_Base::body->size(), UClientImage_Base::body->rep)
@ -3779,7 +3779,7 @@ file_in_cache:
usp_page->runDynamicPage(0); usp_page->runDynamicPage(0);
if (U_ClientImage_parallelization != 2) setDynamicResponse(); // 2 => parent of parallelization if (U_ClientImage_parallelization != U_PARALLELIZATION_PARENT) setDynamicResponse();
U_RESET_MODULE_NAME; U_RESET_MODULE_NAME;
@ -4226,7 +4226,7 @@ void UHTTP::setEndRequestProcessing()
U_INTERNAL_DUMP("U_ClientImage_parallelization = %d", U_ClientImage_parallelization) U_INTERNAL_DUMP("U_ClientImage_parallelization = %d", U_ClientImage_parallelization)
if (U_ClientImage_parallelization <= 1) // 1 => child of parallelization if (U_ClientImage_parallelization <= U_PARALLELIZATION_CHILD)
{ {
(void) UFile::rmdir(*tmpdir, true); (void) UFile::rmdir(*tmpdir, true);

View File

@ -30,7 +30,7 @@ fi
# We need to install mongo-c-driver (we don't have a ubuntu package) # We need to install mongo-c-driver (we don't have a ubuntu package)
#RETCODE=$(fw_exists ${IROOT}/mongo-c-driver.installed) #RETCODE=$(fw_exists ${IROOT}/mongo-c-driver.installed)
#if [ "$RETCODE" != 0 ]; then #if [ "$RETCODE" != 0 ]; then
fw_get -O https://github.com/mongodb/mongo-c-driver/releases/download/1.1.10/mongo-c-driver-1.1.10.tar.gz fw_get --ignore-content-length -O https://github.com/mongodb/mongo-c-driver/releases/download/1.1.10/mongo-c-driver-1.1.10.tar.gz
fw_untar mongo-c-driver-1.1.10.tar.gz fw_untar mongo-c-driver-1.1.10.tar.gz
cd mongo-c-driver-1.1.10/ cd mongo-c-driver-1.1.10/
./configure --prefix=$IROOT --libdir=$IROOT ./configure --prefix=$IROOT --libdir=$IROOT