X-Git-Url: http://git.eversberg.eu/gitweb.cgi?p=lcr.git;a=blobdiff_plain;f=main.c;h=8fe35a726828411933158b1cdc3cc15f1291aa14;hp=38c710a9db2d7f186521bcc4be4e98376b527004;hb=1bfbfbf903777d13df3107fbc89bdaeb2af9f2d6;hpb=ce197cab91d66c14f11d818f343720a785dd616e diff --git a/main.c b/main.c index 38c710a..8fe35a7 100644 --- a/main.c +++ b/main.c @@ -9,21 +9,6 @@ ** ** \*****************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include #include "main.h" MESSAGES @@ -41,7 +26,11 @@ struct timezone now_tz; now_tm = localtime(&now); \ } +#ifdef SOCKET_MISDN +FILE *debug_fp = NULL; +#else int global_debug = 0; +#endif int quit=0; #if 0 @@ -51,6 +40,7 @@ struct lcr_fdset lcr_fdset[FD_SETSIZE]; pthread_mutex_t mutexd; // debug output mutex //pthread_mutex_t mutext; // trace output mutex pthread_mutex_t mutexe; // error output mutex +pthread_mutex_t mutex_lcr; // lcr process mutex int memuse = 0; int mmemuse = 0; @@ -82,8 +72,13 @@ void debug(const char *function, int line, char *prefix, char *buffer) last_debug = debug_count; if (!nooutput) printf("\033[34m--------------------- %04d.%02d.%02d %02d:%02d:%02d %06d\033[36m\n", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, debug_count%1000000); +#ifdef SOCKET_MISDN + if (debug_fp) + fprintf(debug_fp, "--------------------- %04d.%02d.%02d %02d:%02d:%02d %06d\n", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, debug_count%1000000); +#else if (options.deb&DEBUG_LOG && global_debug) dprint(DBGM_MAN, 0, "--------------------- %04d.%02d.%02d %02d:%02d:%02d %06d\n", now_tm->tm_year+1900, now_tm->tm_mon+1, now_tm->tm_mday, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec, debug_count%1000000); +#endif } if (!nooutput) @@ -96,14 +91,26 @@ void debug(const char *function, int line, char *prefix, char *buffer) printf("%s", buffer); } +#ifdef SOCKET_MISDN + if (debug_fp) +#else if (options.deb&DEBUG_LOG && global_debug) +#endif { if (debug_newline) { if (function) +#ifdef SOCKET_MISDN + fprintf(debug_fp, "%s%s(in %s() line %d): %s", prefix?prefix:"", prefix?" ":"", function, line, buffer); +#else dprint(DBGM_MAN, 0, "%s%s(in %s() line %d): %s", prefix?prefix:"", prefix?" ":"", function, line, buffer); +#endif else +#ifdef SOCKET_MISDN + fprintf(debug_fp, "%s%s: %s", prefix?prefix:"", prefix?" ":"", buffer); +#else dprint(DBGM_MAN, 0, "%s%s: %s", prefix?prefix:"", prefix?" ":"", buffer); +#endif } } @@ -209,6 +216,9 @@ int main(int argc, char *argv[]) memset(lcr_fdset, 0, sizeof(lcr_fdset)); #endif + /* lock LCR process */ + pthread_mutex_lock(&mutex_lcr); + /* current time */ GET_NOW(); @@ -463,6 +473,7 @@ int main(int argc, char *argv[]) quit = 0; while(!quit) { + last_d = now_d; GET_NOW(); if (now_d-last_d > 1.0) @@ -472,15 +483,15 @@ int main(int argc, char *argv[]) /* all loops must be counted from the beginning since nodes might get freed during handler */ all_idle = 1; -#warning debugging usleep crash - debug_usleep(1, __FILE__, __LINE__, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); +//#warning debugging usleep crash +// debug_usleep(1, __FILE__, __LINE__, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); /* handle mISDN messages from kernel */ debug_prefix = "ISDN"; if (mISDN_handler()) all_idle = 0; -#warning debugging usleep crash - debug_usleep(1, __FILE__, __LINE__, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); +//#warning debugging usleep crash +// debug_usleep(1, __FILE__, __LINE__, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); BUDETECT @@ -623,8 +634,8 @@ BUDETECT all_idle = 0; } #endif -#warning debugging usleep crash - debug_usleep(1, __FILE__, __LINE__, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); +//#warning debugging usleep crash +// debug_usleep(1, __FILE__, __LINE__, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); /* do idle checking */ if (idlecheck != now) @@ -637,7 +648,9 @@ BUDETECT /* did we do nothing? so we wait to give time to other processes */ if (all_idle) { + pthread_mutex_unlock(&mutex_lcr); // unlock LCR debug_usleep(4000, __FILE__, __LINE__, now_tm->tm_hour, now_tm->tm_min, now_tm->tm_sec); + pthread_mutex_lock(&mutex_lcr); // lock LCR idletime += 4000; } } @@ -658,7 +671,7 @@ free: if (options.schedule > 1) { memset(&schedp, 0, sizeof(schedp)); - schedp.sched_priority = 0; + schedp.sched_priority = options.schedule; sched_setscheduler(0, SCHED_OTHER, &schedp); } /* reset signals */ @@ -739,7 +752,6 @@ free: /* deinitialize mISDN */ mISDN_deinitialize(); - global_debug = 0; /* display memory leak */ #define MEMCHECK(a, b) \ @@ -765,6 +777,9 @@ free: MEMCHECK("file descriptor(s) left",fduse) MEMCHECK("file handler(s) left",fhuse) + /* unlock LCR process */ + pthread_mutex_unlock(&mutex_lcr); + /* take me out */ return(ret); }