From b3acb187b636517caa01b82bcc2ee7c7ac69de30 Mon Sep 17 00:00:00 2001 From: Perry Werneck Date: Tue, 4 Aug 2020 15:51:49 -0300 Subject: [PATCH] Fixing performance issues. --- client/src/core/windows/request.cc | 1 + server/src/core/methods/methods.c | 18 +++++++++--------- server/src/core/windows/pipesource.c | 16 ++++++++++++++-- server/src/testprogram/testprogram.c | 3 +++ 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/client/src/core/windows/request.cc b/client/src/core/windows/request.cc index 9f6e260..f805bea 100644 --- a/client/src/core/windows/request.cc +++ b/client/src/core/windows/request.cc @@ -136,6 +136,7 @@ } debug("Received response \"", in.block, "\" with ", in.used, " bytes"); + #ifdef DEBUG // lib3270_trace_data(NULL,"Response block",(const char *) this->in.block, this->in.used); #endif // DEBUG diff --git a/server/src/core/methods/methods.c b/server/src/core/methods/methods.c index ba23f1f..44c521b 100644 --- a/server/src/core/methods/methods.c +++ b/server/src/core/methods/methods.c @@ -83,24 +83,18 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req debug("%s(%s,request=%p,response=%p,error=%p)",__FUNCTION__,method_name,request,response,*error); - lib3270_write_event_trace(hSession,"Method %s called on session %c\n",method_name,lib3270_get_session_id(hSession)); - for(ix = 0; ix < G_N_ELEMENTS(methods); ix++) { if(!g_ascii_strcasecmp(methods[ix].name,method_name)) { - g_message("Running method %s",method_name); - int rc = methods[ix].call(object,request,response,error); + lib3270_write_event_trace(hSession,"Method %s called on session %c\n",method_name,lib3270_get_session_id(hSession)); - debug("rc=%d error=%p",rc,*error); + int rc = methods[ix].call(object,request,response,error); if(rc) { - g_message("Method %s failed with rc=%d (%s)",method_name,rc,ipc3270_get_error_message(rc)); - debug("%s exits with rc=%d (%s)",methods[ix].name,rc,ipc3270_get_error_message(rc)); - lib3270_write_log(hSession,"IPC","%s exits with rc=%d (%s)",methods[ix].name,rc,ipc3270_get_error_message(rc)); + lib3270_write_event_trace(hSession,"Method %s failed with rc=%d (%s)",method_name,rc,ipc3270_get_error_message(rc)); ipc3270_set_error(object,rc,error); - debug("Error Message was set to %s",(*error)->message); } return 0; @@ -110,6 +104,9 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req // Check actions table. const LIB3270_ACTION * action = lib3270_action_get_by_name(method_name); if(action) { + + lib3270_write_event_trace(hSession,"Action %s called on session %c\n",method_name,lib3270_get_session_id(hSession)); + if(lib3270_action_activate(action,hSession)) { ipc3270_set_error(object,errno,error); } @@ -123,6 +120,8 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req if(!g_ascii_strcasecmp(int_methods[ix].name,method_name)) { + lib3270_write_event_trace(hSession,"Internal method %s called on session %c\n",method_name,lib3270_get_session_id(hSession)); + gint value; g_variant_get(request, "(i)", &value); @@ -137,6 +136,7 @@ int ipc3270_method_call(GObject *object, const gchar *method_name, GVariant *req } + lib3270_write_event_trace(hSession,"Unknown method %s\n",method_name); g_message("Unknown method \"%s\"",method_name); return ENOENT; diff --git a/server/src/core/windows/pipesource.c b/server/src/core/windows/pipesource.c index 6842421..139d568 100644 --- a/server/src/core/windows/pipesource.c +++ b/server/src/core/windows/pipesource.c @@ -101,16 +101,22 @@ static void process_input(IPC3270_PIPE_SOURCE *source, DWORD cbRead) { H3270 * hSession = ipc3270_get_session(source->object); int request_type = 0; + /* if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_EVENT_TRACE)) lib3270_trace_data(hSession, "IPC Data block received on pipe", (const unsigned char *) source->buffer, (size_t) cbRead); debug("Received packet \"%s\" with %u bytes", request_name, (unsigned int) cbRead); + */ g_autoptr (GError) error = NULL; g_autoptr (GVariant) response = NULL; g_autoptr (GVariant) parameters = ipc3270_unpack(source->buffer, &request_type); - debug("************ error=%p",error); +/* +#ifdef DEBUG + clock_t begin_time = clock(); +#endif // DEBUG +*/ if(parameters) { @@ -155,7 +161,11 @@ static void process_input(IPC3270_PIPE_SOURCE *source, DWORD cbRead) { } - debug("response=%p",response); +/* +#ifdef DEBUG + g_message("Command takes %lu",(unsigned long) (clock () - begin_time)); +#endif // DEBUG +*/ // Pack response size_t szPacket = 0; @@ -174,8 +184,10 @@ static void process_input(IPC3270_PIPE_SOURCE *source, DWORD cbRead) { // Send response DWORD wrote = (DWORD) szPacket; + /* if(lib3270_get_toggle(hSession,LIB3270_TOGGLE_EVENT_TRACE)) lib3270_trace_data(hSession, "IPC Data block sent to pipe", (const unsigned char *) buffer, szPacket); + */ WriteFile(source->hPipe,buffer,wrote,&wrote,NULL); diff --git a/server/src/testprogram/testprogram.c b/server/src/testprogram/testprogram.c index b91ed6d..ec74509 100644 --- a/server/src/testprogram/testprogram.c +++ b/server/src/testprogram/testprogram.c @@ -42,6 +42,7 @@ #include #include #include + #include /*---[ Globals ]------------------------------------------------------------------------------------*/ @@ -227,6 +228,8 @@ g_signal_connect(terminal,"session_changed",G_CALLBACK(session_changed),window); + lib3270_set_toggle(v3270_get_session(terminal),LIB3270_TOGGLE_EVENT_TRACE,1); + } int main (int argc, char **argv) { -- libgit2 0.21.2