Changeset: 66fa5d228f46 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=66fa5d228f46
Modified Files:
        monetdb5/mal/mal_profiler.c
Branch: default
Log Message:

Be resistent against file changes
The /proc file could change, which made the file descriptor stale.
Now we re-open it on each call.


diffs (59 lines):

diff --git a/monetdb5/mal/mal_profiler.c b/monetdb5/mal/mal_profiler.c
--- a/monetdb5/mal/mal_profiler.c
+++ b/monetdb5/mal/mal_profiler.c
@@ -1250,16 +1250,18 @@ static struct{
 } corestat[256];
 
 static char cpuload[BUFSIZ];
-static FILE *proc;
 
 static void gatherCPULoad(void){
     int cpu, len;
        long user, nice, system, idle, iowait;
     char buf[BUFSIZ],*s;
+       FILE *proc;
 
-    if ( proc == 0)
-        return;
-       rewind(proc);
+       proc = fopen("/proc/stat","r");
+       if ( proc == NULL) {
+               /* unexpected */
+               return;
+       }
        while (fgets(buf, BUFSIZ,proc) != NULL)
        if ( strncmp(buf,"cpu",3)== 0){
                s= buf+3;
@@ -1290,6 +1292,7 @@ static void gatherCPULoad(void){
                len -= (int)strlen(s);
                s += (int) strlen(s);
        }
+       fclose(proc);
 }
 
 static void profilerHeartbeat(void *dummy){
@@ -1309,14 +1312,12 @@ static void profilerHeartbeat(void *dumm
                getrusage(RUSAGE_SELF, &prevUsage);
 #endif
        (void) dummy;
-    proc = fopen("/proc/stat","r");
        gatherCPULoad();
        gettimeofday(&tv,NULL);
        prevclock = (time_t) tv.tv_sec;
 
-       while (eventstream){
+       while (eventstream ){
                MT_sleep_ms(hbdelay);
-
                if (delayswitch > 0) {
                        /* first call to profiled */
                        offlineProfilerHeader();
@@ -1424,8 +1425,6 @@ static void profilerHeartbeat(void *dumm
                flushLog();
                MT_lock_unset(&mal_profileLock, "profileLock");
        }
-       if ( proc)
-               (void) fclose(proc);
        hbdelay = 0;
        THRdel(thr);
 }
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to