static void delregion(region r) { nochildren(r); VALGRIND_DESTROY_MEMPOOL(r); VALGRIND_MAKE_WRITABLE(r, sizeof(struct page)); free_all_pages(r, &r->normal); // VALGRIND_DO_QUICK_LEAK_CHECK; // VALGRIND_FREELIKE_BLOCK(r, 0); // fprintf(stderr, "##delregion: r->normal.page.end = %p\n", r->normal.page.end); // fprintf(stderr, "## r+1 = %p\n", r+1); if (r->normal.page.end) { // VALGRIND_MAKE_NOACCESS((char*)(r+1), r->normal.page.end - (char*)(r+1)); } // VALGRIND_MAKE_NOACCESS(r, sizeof(*r)); --num_regions_active; }
int main(int argc,char** argv) { ul low,high,target; if(argc!=3){show_help();return 0;} char* end; low = strtoul(argv[1],&end,10); low *= unit_expand(*end); high = strtoul(argv[2],&end,10); high *= unit_expand(*end); if(low>=high){ fprintf(stderr,"low value must less than high value\n"); return -1; } if(high>=MAX_MB*1024){ fprintf(stderr,"high value must less than MAX_MB(%u)\n",MAX_MB); return -1; } printf("\n"); visit_pages(low); sleep(RESP_TIME); for(target = low;target<high;target+=ONE_PAGE*5){ printf("."); fflush(stdout); visit_pages(ONE_PAGE*5); sleep(1); } for(target = high;target>=low;target-=ONE_PAGE*5){ printf("."); fflush(stdout); free_pages(ONE_PAGE*5); sleep(1); } free_all_pages(); sleep(1); printf("\n"); return 0; }
int main(int argc,char** argv) { printf("type a mem value to allocate and keep,\n" "type q to quit\n"); char str[256]; ul tg_mem; if(argc==2){ char* end; tg_mem = strtoul(argv[1],&end,10); tg_mem *= unit_expand(*end); visit_pages(tg_mem); } int flags = fcntl(STDIN_FILENO,F_GETFL,0); flags |= O_NONBLOCK; fcntl(STDIN_FILENO, F_SETFL,flags); printf(":>"); fflush(stdout); while(1){ /*#if LOW_CPU struct timespec tm_,rem_; tm_.tv_sec = 0; tm_.tv_nsec = NANO_SLEEP_TIME; nanosleep(&tm_,&rem_); #endif*/ int ret = read(0,str,sizeof(str)); if(ret == -1 && errno == EAGAIN){ flush_pages(); continue; } printf(":>"); fflush(stdout); free_all_pages(); if(str[0]=='q') break; char* end; tg_mem = strtoul(str,&end,10); tg_mem *= unit_expand(*end); visit_pages(tg_mem); } return 0; }