diff options
Diffstat (limited to 'xrdp')
| -rw-r--r-- | xrdp/lang.c | 8 | ||||
| -rw-r--r-- | xrdp/xrdp.c | 69 | ||||
| -rw-r--r-- | xrdp/xrdp.h | 2 | ||||
| -rw-r--r-- | xrdp/xrdp.ini | 8 | ||||
| -rw-r--r-- | xrdp/xrdp_bitmap.c | 33 | ||||
| -rw-r--r-- | xrdp/xrdp_listen.c | 32 | ||||
| -rw-r--r-- | xrdp/xrdp_login_wnd.c | 5 | ||||
| -rw-r--r-- | xrdp/xrdp_mm.c | 25 | ||||
| -rw-r--r-- | xrdp/xrdp_painter.c | 4 | ||||
| -rw-r--r-- | xrdp/xrdp_process.c | 2 | ||||
| -rw-r--r-- | xrdp/xrdp_types.h | 2 | ||||
| -rw-r--r-- | xrdp/xrdp_wm.c | 17 | ||||
| -rw-r--r-- | xrdp/xrdpwin.c | 2 |
13 files changed, 156 insertions, 53 deletions
diff --git a/xrdp/lang.c b/xrdp/lang.c index 6bcf7ebe..1c13839f 100644 --- a/xrdp/lang.c +++ b/xrdp/lang.c @@ -22,6 +22,7 @@ */ #include "xrdp.h" +#include "log.h" /* map for rdp to x11 scancodes code1 is regular scancode, code2 is extended scancode */ @@ -232,13 +233,18 @@ get_keymaps(int keylayout, struct xrdp_keymap* keymap) km_read_section(fd, "shiftcapslock", keymap->keys_shiftcapslock); if (g_memcmp(lkeymap, keymap, sizeof(struct xrdp_keymap)) != 0) { - g_writeln("local keymap file for 0x%4.4x found and dosen't match " + log_message(LOG_LEVEL_WARNING, + "local keymap file for 0x%4.4x found and dosen't match " "built in keymap, using local keymap file", keylayout); } g_free(lkeymap); g_file_close(fd); } } + else + { + log_message(LOG_LEVEL_WARNING,"File does not exist: %s",filename); + } g_free(filename); return 0; } diff --git a/xrdp/xrdp.c b/xrdp/xrdp.c index 95936cef..ec019222 100644 --- a/xrdp/xrdp.c +++ b/xrdp/xrdp.c @@ -21,6 +21,9 @@ */ #include "xrdp.h" +#include "log.h" + +#define THREAD_WAITING 100 static struct xrdp_listen* g_listen = 0; static long g_threadid = 0; /* main threadid */ @@ -37,6 +40,9 @@ static long g_sync_param2 = 0; static long (*g_sync_func)(long param1, long param2); /*****************************************************************************/ +/* This function is used to run a function from the main thread. + Sync_func is the function pointer that will run from main thread + The function can have two long in parameters and must return long */ long APP_CC g_xrdp_sync(long (*sync_func)(long param1, long param2), long sync_param1, long sync_param2) @@ -44,32 +50,46 @@ g_xrdp_sync(long (*sync_func)(long param1, long param2), long sync_param1, long sync_result; int sync_command; + /* If the function is called from the main thread, the function can + * be called directly. g_threadid= main thread ID*/ if (tc_threadid_equal(tc_get_threadid(), g_threadid)) { /* this is the main thread, call the function directly */ /* in fork mode, this always happens too */ sync_result = sync_func(sync_param1, sync_param2); + /*g_writeln("g_xrdp_sync processed IN main thread -> continue");*/ } else { + /* All threads have to wait here until the main thread + * process the function. g_process_waiting_function() is called + * from the listening thread. g_process_waiting_function() process the function*/ tc_mutex_lock(g_sync1_mutex); tc_mutex_lock(g_sync_mutex); g_sync_param1 = sync_param1; g_sync_param2 = sync_param2; g_sync_func = sync_func; - g_sync_command = 100; + /* set a value THREAD_WAITING so the g_process_waiting_function function + * know if any function must be processed */ + g_sync_command = THREAD_WAITING; tc_mutex_unlock(g_sync_mutex); - g_set_wait_obj(g_sync_event); + /* set this event so that the main thread know if + * g_process_waiting_function() must be called */ + g_set_wait_obj(g_sync_event); do { g_sleep(100); tc_mutex_lock(g_sync_mutex); - sync_command = g_sync_command; + /* load new value from global to see if the g_process_waiting_function() + * function has processed the function */ + sync_command = g_sync_command; sync_result = g_sync_result; tc_mutex_unlock(g_sync_mutex); } - while (sync_command != 0); + while (sync_command != 0); /* loop until g_process_waiting_function() + * has processed the request*/ tc_mutex_unlock(g_sync1_mutex); + /*g_writeln("g_xrdp_sync processed BY main thread -> continue");*/ } return sync_result; } @@ -159,15 +179,17 @@ pipe_sig(int sig_num) } /*****************************************************************************/ +/*Some function must be called from the main thread. + if g_sync_command==THREAD_WAITING a function is waiting to be processed*/ void APP_CC -g_loop(void) +g_process_waiting_function(void) { tc_mutex_lock(g_sync_mutex); if (g_sync_command != 0) { if (g_sync_func != 0) { - if (g_sync_command == 100) + if (g_sync_command == THREAD_WAITING) { g_sync_result = g_sync_func(g_sync_param1, g_sync_param2); } @@ -261,6 +283,8 @@ main(int argc, char** argv) { int test; int host_be; + char cfg_file[256]; + enum logReturns error; struct xrdp_startup_params* startup_params; int pid; int fd; @@ -304,6 +328,29 @@ main(int argc, char** argv) g_writeln("unusable tui64 size, must be 8"); return 0; } + g_snprintf(cfg_file, 255, "%s/xrdp.ini", XRDP_CFG_PATH); + + /* starting logging subsystem */ + error = log_start(cfg_file, "XRDP"); + + if (error != LOG_STARTUP_OK) + { + switch (error) + { + case LOG_ERROR_MALLOC: + g_writeln("error on malloc. cannot start logging. quitting."); + break; + case LOG_ERROR_FILE_OPEN: + g_writeln("error opening log file [%s]. quitting.", + getLogFile(text, 255)); + break; + default: + g_writeln("log_start error"); + break; + } + g_deinit(); + g_exit(1); + } startup_params = (struct xrdp_startup_params*) g_malloc(sizeof(struct xrdp_startup_params), 1); @@ -464,13 +511,17 @@ main(int argc, char** argv) pid = g_getpid(); g_snprintf(text, 255, "xrdp_%8.8x_main_term", pid); g_term_event = g_create_wait_obj(text); - g_snprintf(text, 255, "xrdp_%8.8x_main_sync", pid); - g_sync_event = g_create_wait_obj(text); if (g_term_event == 0) { g_writeln("error creating g_term_event"); } - g_listen->startup_params = startup_params; + g_snprintf(text, 255, "xrdp_%8.8x_main_sync", pid); + g_sync_event = g_create_wait_obj(text); + if (g_sync_event == 0) + { + g_writeln("error creating g_sync_event"); + } + g_listen->startup_params = startup_params; xrdp_listen_main_loop(g_listen); xrdp_listen_delete(g_listen); tc_mutex_delete(g_sync_mutex); diff --git a/xrdp/xrdp.h b/xrdp/xrdp.h index 0bc4a24d..2ef81659 100644 --- a/xrdp/xrdp.h +++ b/xrdp/xrdp.h @@ -52,7 +52,7 @@ g_get_term_event(void); tbus APP_CC g_get_sync_event(void); void APP_CC -g_loop(void); +g_process_waiting_function(void); /* xrdp_cache.c */ struct xrdp_cache* APP_CC diff --git a/xrdp/xrdp.ini b/xrdp/xrdp.ini index af5f2650..7cab7000 100644 --- a/xrdp/xrdp.ini +++ b/xrdp/xrdp.ini @@ -19,6 +19,14 @@ fork=yes #autorun=xrdp7 #hidelogwindow=yes +[Logging] +LogFile=xrdp.log +LogLevel=DEBUG +EnableSyslog=1 +SyslogLevel=DEBUG +# LogLevel and SysLogLevel could by any of: core, error, warning, info or debug + + [xrdp1] name=sesman-Xvnc lib=libvnc.so diff --git a/xrdp/xrdp_bitmap.c b/xrdp/xrdp_bitmap.c index cee6f40b..d568345f 100644 --- a/xrdp/xrdp_bitmap.c +++ b/xrdp/xrdp_bitmap.c @@ -24,6 +24,7 @@ */ #include "xrdp.h" +#include "log.h" static int g_crc_seed = 0xffffffff; static int g_crc_table[256] = @@ -351,8 +352,8 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, const char* filename, int* palette) if (!g_file_exist(filename)) { - g_writeln("xrdp_bitmap_load: error bitmap file [%s] does not exist", - filename); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error bitmap file [%s] does not exist",filename); return 1; } s = (struct stream *)NULL; @@ -362,15 +363,15 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, const char* filename, int* palette) /* read file type */ if (g_file_read(fd, type1, 2) != 2) { - g_writeln("xrdp_bitmap_load: error bitmap file [%s] read error", - filename); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error bitmap file [%s] read error",filename); g_file_close(fd); return 1; } if ((type1[0] != 'B') || (type1[1] != 'M')) { - g_writeln("xrdp_bitmap_load: error bitmap file [%s] not BMP file", - filename); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error bitmap file [%s] not BMP file", filename); g_file_close(fd); return 1; } @@ -397,8 +398,8 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, const char* filename, int* palette) if ((header.bit_count != 4) && (header.bit_count != 8) && (header.bit_count != 24)) { - g_writeln("xrdp_bitmap_load: error bitmap file [%s] bad bpp %d", - filename, header.bit_count); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error bitmap file [%s] bad bpp %d",filename, header.bit_count); free_stream(s); g_file_close(fd); return 1; @@ -416,8 +417,8 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, const char* filename, int* palette) k = g_file_read(fd, s->data + i * size, size); if (k != size) { - g_writeln("xrdp_bitmap_load: error bitmap file [%s] read", - filename); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error bitmap file [%s] read",filename); } } for (i = 0; i < self->height; i++) @@ -470,8 +471,8 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, const char* filename, int* palette) k = g_file_read(fd, s->data + i * size, size); if (k != size) { - g_writeln("xrdp_bitmap_load: error bitmap file [%s] read", - filename); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error bitmap file [%s] read", filename); } } for (i = 0; i < self->height; i++) @@ -520,8 +521,8 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, const char* filename, int* palette) k = g_file_read(fd, s->data + i * size, size); if (k != size) { - g_writeln("xrdp_bitmap_load: error bitmap file [%s] read", - filename); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error bitmap file [%s] read",filename); } } for (i = 0; i < self->height; i++) @@ -563,8 +564,8 @@ xrdp_bitmap_load(struct xrdp_bitmap* self, const char* filename, int* palette) } else { - g_writeln("xrdp_bitmap_load: error loading bitmap from file [%s]", - filename); + log_message(LOG_LEVEL_ERROR, + "xrdp_bitmap_load: error loading bitmap from file [%s]", filename); return 1; } return 0; diff --git a/xrdp/xrdp_listen.c b/xrdp/xrdp_listen.c index bbdd729a..f6dba5c8 100644 --- a/xrdp/xrdp_listen.c +++ b/xrdp/xrdp_listen.c @@ -37,6 +37,10 @@ xrdp_listen_create_pro_done(struct xrdp_listen* self) pid = g_getpid(); g_snprintf(text, 255, "xrdp_%8.8x_listen_pro_done_event", pid); self->pro_done_event = g_create_wait_obj(text); + if(self->pro_done_event == 0) + { + g_writeln("Failure creating pro_done_event"); + } return 0; } @@ -278,7 +282,6 @@ xrdp_listen_main_loop(struct xrdp_listen* self) tbus robjs[8]; tbus term_obj; tbus sync_obj; - tbus sck_obj; tbus done_obj; self->status = 1; @@ -295,7 +298,7 @@ xrdp_listen_main_loop(struct xrdp_listen* self) { self->listen_trans->trans_conn_in = xrdp_listen_conn_in; self->listen_trans->callback_data = self; - term_obj = g_get_term_event(); + term_obj = g_get_term_event(); /*Global termination event */ sync_obj = g_get_sync_event(); done_obj = self->pro_done_event; cont = 1; @@ -307,31 +310,33 @@ xrdp_listen_main_loop(struct xrdp_listen* self) robjs[robjs_count++] = sync_obj; robjs[robjs_count++] = done_obj; timeout = -1; - if (trans_get_wait_objs(self->listen_trans, robjs, &robjs_count, - &timeout) != 0) + if (trans_get_wait_objs(self->listen_trans, robjs, &robjs_count) != 0) { + g_writeln("Listening socket is in wrong state we terminate listener") ; break; } - /* wait */ + /* wait - timeout -1 means wait indefinitely*/ if (g_obj_wait(robjs, robjs_count, 0, 0, timeout) != 0) { /* error, should not get here */ g_sleep(100); } - if (g_is_wait_obj_set(term_obj)) /* term */ + if (g_is_wait_obj_set(term_obj)) /* termination called */ { break; } - if (g_is_wait_obj_set(sync_obj)) /* sync */ + if (g_is_wait_obj_set(sync_obj)) /* some function must be processed by this thread */ { g_reset_wait_obj(sync_obj); - g_loop(); + g_process_waiting_function(); /* run the function */ } if (g_is_wait_obj_set(done_obj)) /* pro_done_event */ { - g_reset_wait_obj(done_obj); + g_reset_wait_obj(done_obj); + /* a process has died remove it from lists*/ xrdp_listen_delete_done_pro(self); } + /* Run the callback when accept() returns a new socket*/ if (trans_check_wait_objs(self->listen_trans) != 0) { break; @@ -348,20 +353,21 @@ xrdp_listen_main_loop(struct xrdp_listen* self) { break; } + timeout = -1; /* build the wait obj list */ robjs_count = 0; robjs[robjs_count++] = sync_obj; robjs[robjs_count++] = done_obj; - /* wait */ - if (g_obj_wait(robjs, robjs_count, 0, 0, -1) != 0) + /* wait - timeout -1 means wait indefinitely*/ + if (g_obj_wait(robjs, robjs_count, 0, 0, timeout) != 0) { /* error, should not get here */ g_sleep(100); } - if (g_is_wait_obj_set(sync_obj)) /* sync */ + if (g_is_wait_obj_set(sync_obj)) /* some function must be processed by this thread */ { g_reset_wait_obj(sync_obj); - g_loop(); + g_process_waiting_function(); /* run the function that is waiting*/ } if (g_is_wait_obj_set(done_obj)) /* pro_done_event */ { diff --git a/xrdp/xrdp_login_wnd.c b/xrdp/xrdp_login_wnd.c index 2b394837..0ea45b0e 100644 --- a/xrdp/xrdp_login_wnd.c +++ b/xrdp/xrdp_login_wnd.c @@ -21,6 +21,7 @@ */ #include "xrdp.h" +#include "log.h" /*****************************************************************************/ /* all login help screen events go here */ @@ -403,14 +404,14 @@ xrdp_wm_login_fill_in_combo(struct xrdp_wm* self, struct xrdp_bitmap* b) fd = g_file_open(cfg_file); /* xrdp.ini */ if (fd < 1) { - g_writeln("Could not read xrdp ini file %s", cfg_file); + log_message(LOG_LEVEL_ERROR,"Could not read xrdp ini file %s", cfg_file); } file_read_sections(fd, sections); for (i = 0; i < sections->count; i++) { p = (char*)list_get_item(sections, i); file_read_section(fd, p, section_names, section_values); - if (g_strncmp(p, "globals", 255) == 0) + if ((g_strncmp(p, "globals", 255) == 0) || (g_strncmp(p,"Logging",255) == 0)) { } else diff --git a/xrdp/xrdp_mm.c b/xrdp/xrdp_mm.c index 223b128b..4060fd86 100644 --- a/xrdp/xrdp_mm.c +++ b/xrdp/xrdp_mm.c @@ -62,6 +62,7 @@ xrdp_mm_sync_load(long param1, long param2) static void APP_CC xrdp_mm_module_cleanup(struct xrdp_mm* self) { + g_writeln("xrdp_mm_module_cleanup"); if (self->mod != 0) { if (self->mod_exit != 0) @@ -72,7 +73,7 @@ xrdp_mm_module_cleanup(struct xrdp_mm* self) } if (self->mod_handle != 0) { - /* main thread unload */ + /* Let the main thread unload the module.*/ g_xrdp_sync(xrdp_mm_sync_unload, self->mod_handle, 0); } trans_delete(self->chan_trans); @@ -280,6 +281,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm* self) } if (self->mod_handle == 0) { + /* Let the main thread load the lib,*/ self->mod_handle = g_xrdp_sync(xrdp_mm_sync_load, (long)lib, 0); if (self->mod_handle != 0) { @@ -315,6 +317,8 @@ xrdp_mm_setup_mod1(struct xrdp_mm* self) g_writeln("loaded module '%s' ok, interface size %d, version %d", lib, self->mod->size, self->mod->version); } + }else{ + g_writeln("no mod_init or mod_exit address found"); } } else @@ -322,6 +326,7 @@ xrdp_mm_setup_mod1(struct xrdp_mm* self) g_snprintf(text, 255, "error loading %s specified in xrdp.ini, please " "add a valid entry like lib=libxrdp-vnc.so or similar", lib); xrdp_wm_log_msg(self->wm, text); + return 1 ; } if (self->mod != 0) { @@ -698,7 +703,7 @@ xrdp_mm_connect_chansrv(struct xrdp_mm* self, char* ip, char* port) self->usechansrv = 1; /* connect channel redir */ - if ((ip == 0) || (strcmp(ip, "127.0.0.1") == 0) || (ip[0] == 0)) + if ((ip == 0) || (g_strcmp(ip, "127.0.0.1") == 0) || (ip[0] == 0)) { /* unix socket */ self->chan_trans = trans_create(TRANS_MODE_UNIX, 8192, 8192); @@ -750,8 +755,6 @@ xrdp_mm_process_login_response(struct xrdp_mm* self, struct stream* s) int ok; int display; int rv; - int uid; - int gid; char text[256]; char ip[256]; char port[256]; @@ -773,7 +776,7 @@ xrdp_mm_process_login_response(struct xrdp_mm* self, struct stream* s) xrdp_wm_set_login_mode(self->wm, 10); self->wm->dragging = 0; /* connect channel redir */ - if ((ip == 0) || (strcmp(ip, "127.0.0.1") == 0) || (ip[0] == 0)) + if ((ip == 0) || (g_strcmp(ip, "127.0.0.1") == 0) || (ip[0] == 0)) { g_snprintf(port, 255, "/tmp/.xrdp/xrdp_chansrv_socket_%d", 7200 + display); } @@ -1041,20 +1044,25 @@ xrdp_mm_connect(struct xrdp_mm* self) if (xrdp_mm_setup_mod2(self) == 0) { xrdp_wm_set_login_mode(self->wm, 10); + rv = 0 ; /*sucess*/ } else { /* connect error */ g_snprintf(errstr, 255, "Failure to connect to: %s port: %s", ip, port); + g_writeln(errstr); xrdp_wm_log_msg(self->wm, errstr); - rv = 1 ; /* failure */ + rv = 1; /* failure */ } + }else{ + g_writeln("Failure setting up module"); } if (self->wm->login_mode != 10) { xrdp_wm_set_login_mode(self->wm, 11); xrdp_mm_module_cleanup(self); + rv = 1 ; /* failure */ } } self->sesman_controlled = use_sesman; @@ -1065,6 +1073,7 @@ xrdp_mm_connect(struct xrdp_mm* self) /* if sesman controlled, this will connect later */ xrdp_mm_connect_chansrv(self, "", chansrvport); } + g_writeln("returnvalue from xrdp_mm_connect %d",rv); return rv; } @@ -1084,11 +1093,11 @@ xrdp_mm_get_wait_objs(struct xrdp_mm* self, rv = 0; if ((self->sesman_trans != 0) && self->sesman_trans_up) { - trans_get_wait_objs(self->sesman_trans, read_objs, rcount, timeout); + trans_get_wait_objs(self->sesman_trans, read_objs, rcount); } if ((self->chan_trans != 0) && self->chan_trans_up) { - trans_get_wait_objs(self->chan_trans, read_objs, rcount, timeout); + trans_get_wait_objs(self->chan_trans, read_objs, rcount); } if (self->mod != 0) { diff --git a/xrdp/xrdp_painter.c b/xrdp/xrdp_painter.c index b7caee31..b91be16d 100644 --- a/xrdp/xrdp_painter.c +++ b/xrdp/xrdp_painter.c @@ -127,6 +127,7 @@ xrdp_painter_font_needed(struct xrdp_painter* self) return 0; } +#if 0 /*****************************************************************************/ /* returns boolean, true if there is something to draw */ static int APP_CC @@ -178,6 +179,7 @@ xrdp_painter_clip_adj(struct xrdp_painter* self, int* x, int* y, *y = *y + dy; return 1; } +#endif /*****************************************************************************/ int APP_CC @@ -200,6 +202,7 @@ xrdp_painter_clr_clip(struct xrdp_painter* self) return 0; } +#if 0 /*****************************************************************************/ static int APP_CC xrdp_painter_rop(int rop, int src, int dst) @@ -225,6 +228,7 @@ xrdp_painter_rop(int rop, int src, int dst) } return dst; } +#endif /*****************************************************************************/ int APP_CC diff --git a/xrdp/xrdp_process.c b/xrdp/xrdp_process.c index df69d057..7a88d524 100644 --- a/xrdp/xrdp_process.c +++ b/xrdp/xrdp_process.c @@ -161,7 +161,7 @@ xrdp_process_main_loop(struct xrdp_process* self) robjs[robjs_count++] = self->self_term_event; xrdp_wm_get_wait_objs(self->wm, robjs, &robjs_count, wobjs, &wobjs_count, &timeout); - trans_get_wait_objs(self->server_trans, robjs, &robjs_count, &timeout); + trans_get_wait_objs(self->server_trans, robjs, &robjs_count); /* wait */ if (g_obj_wait(robjs, robjs_count, wobjs, wobjs_count, timeout) != 0) { diff --git a/xrdp/xrdp_types.h b/xrdp/xrdp_types.h index 0366fd83..1e833d16 100644 --- a/xrdp/xrdp_types.h +++ b/xrdp/xrdp_types.h @@ -19,6 +19,8 @@ types */ +#define DEFAULT_STRING_LEN 255 +#define LOG_WINDOW_CHAR_PER_LINE 60 /* lib */ struct xrdp_mod diff --git a/xrdp/xrdp_wm.c b/xrdp/xrdp_wm.c index 3f9d3c6e..c486f67b 100644 --- a/xrdp/xrdp_wm.c +++ b/xrdp/xrdp_wm.c @@ -1556,6 +1556,21 @@ xrdp_wm_log_wnd_notify(struct xrdp_bitmap* wnd, return 0; } + void add_string_to_logwindow(char *msg,struct list* log) + { + + char *new_part_message; + char *current_pointer = msg ; + int processedlen = 0; + do{ + new_part_message = g_strndup(current_pointer,LOG_WINDOW_CHAR_PER_LINE) ; + g_writeln(new_part_message); + list_add_item(log, (long)new_part_message); + processedlen = processedlen + g_strlen(new_part_message); + current_pointer = current_pointer + g_strlen(new_part_message) ; + }while((processedlen<g_strlen(msg)) && (processedlen<DEFAULT_STRING_LEN)); + } + /*****************************************************************************/ int APP_CC xrdp_wm_log_msg(struct xrdp_wm* self, char* msg) @@ -1570,7 +1585,7 @@ xrdp_wm_log_msg(struct xrdp_wm* self, char* msg) { return 0; } - list_add_item(self->log, (long)g_strdup(msg)); + add_string_to_logwindow(msg,self->log); if (self->log_wnd == 0) { w = DEFAULT_WND_LOG_W; diff --git a/xrdp/xrdpwin.c b/xrdp/xrdpwin.c index d2c2d0f3..849f7112 100644 --- a/xrdp/xrdpwin.c +++ b/xrdp/xrdpwin.c @@ -140,7 +140,7 @@ pipe_sig(int sig_num) /*****************************************************************************/ void APP_CC -g_loop(void) +g_process_waiting_function(void) { tc_mutex_lock(g_sync_mutex); if (g_sync_command != 0) |
