瀏覽代碼

bugfix rare infinite loop in gc

Nicolas Cannasse 8 年之前
父節點
當前提交
4b69c77996
共有 1 個文件被更改,包括 6 次插入7 次删除
  1. 6 7
      src/alloc.c

+ 6 - 7
src/alloc.c

@@ -418,14 +418,13 @@ resume:
 					if( p->sizes[next] == 0 ) hl_fatal("assert");
 #					endif
 					next += p->sizes[next];
-					if( (next>>5) != fid ) {
-						if( next + nblocks > p->max_blocks ) {
-							p->next_block = next;
-							p = p->next_page;
-							goto loop;
-						}
-						continue;
+					if( next + nblocks > p->max_blocks ) {
+						p->next_block = next;
+						p = p->next_page;
+						goto loop;
 					}
+					if( (next>>5) != fid ) 
+						continue;
 					goto resume;
 				}
 				bits = TRAILING_ZEROES( (next & 31) ? (fetch_bits >> (next&31)) | (1<<(32-(next&31))) : fetch_bits );