diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 7507d28f447a828a960b3bac1241149726540d26..7396a75d455b832482e659137332c9b01b853097 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -640,10 +640,10 @@ js_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report) char file[MAX_PATH+1]; char* prot="???"; SOCKET sock=0; - char* warning; + char* warning = ""; service_client_t* client; jsrefcount rc; - int log_level; + int log_level = LOG_ERR; if((client=(service_client_t*)JS_GetContextPrivate(cx))!=NULL) { prot=client->service->protocol; @@ -673,9 +673,21 @@ js_ErrorReporter(JSContext *cx, const char *message, JSErrorReport *report) else warning="warning"; log_level=LOG_WARNING; - } else { - log_level=LOG_ERR; - warning=""; + } else if(report->filename != NULL) { + static pthread_mutex_t mutex; + static bool mutex_initialized; + static char lastfile[MAX_PATH + 1]; + static uint lastline; + if(!mutex_initialized) { + pthread_mutex_init(&mutex,NULL); + mutex_initialized = true; + } + pthread_mutex_lock(&mutex); + if(lastline == report->lineno && strcmp(lastfile, report->filename) == 0) + log_level = LOG_WARNING; + lastline = report->lineno; + SAFECOPY(lastfile, report->filename); + pthread_mutex_unlock(&mutex); } rc=JS_SUSPENDREQUEST(cx);