X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.1%2Fguicast%2Fbctrace.C;h=027379bcad5faf867cb2d0e0d6acc32da51ba5d3;hb=74afbc29ac4ce9d94d53e10342979f2c59f1f193;hp=b15cfea17fba633b6f087dfdabefc537318a2c39;hpb=dafc18d66d48cd981a012d2e73a3b3db5351c538;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.1/guicast/bctrace.C b/cinelerra-5.1/guicast/bctrace.C index b15cfea1..027379bc 100644 --- a/cinelerra-5.1/guicast/bctrace.C +++ b/cinelerra-5.1/guicast/bctrace.C @@ -345,7 +345,6 @@ void BC_Trace::unset_temp(char *string) TheLock TheLocker::the_lock; TheList TheList::the_list; -TheChk TheChk::the_chk; int lock_item::table_id = 0; @@ -353,7 +352,7 @@ void TheList::dbg_add(pthread_t tid, pthread_t owner, const char *nm) { TheLocker the_locker; int i = the_list.size(); - while( --i >= 0 && the_list[i]->tid != tid ); + while( --i >= 0 && !(the_list[i]->tid == tid && the_list[i]->owner == owner) ); if( i >= 0 ) { printf("dbg_add, dup %016lx %s %s\n", (unsigned long)tid, nm, the_list[i]->name); @@ -399,3 +398,49 @@ void BC_Trace::dump_threads(FILE *fp) } +void BC_Trace::dump_shm_stat(const char *fn, FILE *fp) +{ + char path[BCTEXTLEN]; + sprintf(path, "/proc/sys/kernel/%s",fn); + FILE *sfp = fopen(path,"r"); + if( !sfp ) return; + uint64_t v = 0; + fscanf(sfp, "%ju", &v); + fclose(sfp); + fprintf(fp, "%s = %ju\n", fn, v); +} + +void BC_Trace::dump_shm_stats(FILE *fp) +{ + dump_shm_stat("shmall", fp); + dump_shm_stat("shmmax", fp); + dump_shm_stat("shmmni", fp); + FILE *sfp = fopen("/proc/sysvipc/shm","r"); + if( !sfp ) return; + char line[BCTEXTLEN]; + int pid = getpid(); + if( !fgets(line,sizeof(line), sfp) ) return; + int64_t used = 0, other = 0; + int n_used = 0, n_other = 0; + while( fgets(line,sizeof(line), sfp) ) { + int key, shmid, perms, cpid, lpid, uid, gid, cuid, cgid; + int64_t size, nattch, atime, dtime, ctime, rss, swap; + if( sscanf(line, + "%d %d %o %ju %u %u %ju %u %u %u %u %ju %ju %ju %ju %ju", + &key, &shmid, &perms, &size, &cpid, &lpid, &nattch, + &uid, &gid, &cuid, &cgid, &atime, &dtime, &ctime, + &rss, &swap) != 16 ) break; + if( cpid == pid ) { + used += size; + ++n_used; + } + else { + other += size; + ++n_other; + } + } + fclose(sfp); + fprintf(fp, "shmused = %jd (%d items)\n", used, n_used); + fprintf(fp, "shmother = %jd (%d items)\n", other, n_other); +} +