فهرست منبع

Resolve races on log buffer without mutex

z3APA3A 9 سال پیش
والد
کامیت
d3f9d80b65
2فایلهای تغییر یافته به همراه4 افزوده شده و 3 حذف شده
  1. 3 0
      src/3proxy.c
  2. 1 3
      src/conf.c

+ 3 - 0
src/3proxy.c

@@ -192,6 +192,7 @@ void doschedule(void){
 
 void dumpcounters(struct trafcount *tlin, int counterd){
 
+ unsigned char tmpbuf[8192];
  struct trafcount *tl;
  if(counterd >= 0 && tlin) {
 
@@ -234,6 +235,7 @@ void dumpcounters(struct trafcount *tlin, int counterd){
 void cyclestep(void){
  struct tm *tm;
  time_t minutecounter;
+ unsigned char tmpbuf[8192];
 
  minutecounter = time(0);
  for(;;){
@@ -362,6 +364,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPWSTR lpCmdLine, int
 #ifdef _WIN32
   unsigned char * arg;
   WSADATA wd;
+  unsigned char tmpbuf[8192];
 
   WSAStartup(MAKEWORD( 1, 1 ), &wd);
   osv.dwOSVersionInfoSize = sizeof(osv);

+ 1 - 3
src/conf.c

@@ -285,6 +285,7 @@ static int h_external(int argc, unsigned char ** argv){
 }
 
 static int h_log(int argc, unsigned char ** argv){ 
+	unsigned char tmpbuf[8192];
 	conf.logfunc = logstdout;
 	if(conf.logtarget){
 		myfree(conf.logtarget);
@@ -314,12 +315,10 @@ static int h_log(int argc, unsigned char ** argv){
 			}
 			conf.logtime = time(0);
 			if(conf.logname)myfree(conf.logname);
-			pthread_mutex_lock(&log_mutex);
 			conf.logname = (unsigned char *)mystrdup((char *)argv[1]);
 			fp = fopen((char *)dologname (tmpbuf, conf.logname, NULL, conf.logtype, conf.logtime), "a");
 			if(!fp){
 				perror(tmpbuf);
-				pthread_mutex_unlock(&log_mutex);
 				return 1;
 			}
 			else {
@@ -330,7 +329,6 @@ static int h_log(int argc, unsigned char ** argv){
 				freopen(tmpbuf, "w", stderr);
 #endif
 			}
-			pthread_mutex_unlock(&log_mutex);
 		}
 	}
 	return 0;