mirror of
				https://github.com/ruby/ruby.git
				synced 2022-11-09 12:17:21 -05:00 
			
		
		
		
	Revert "Fix zero free objects assertion"
This reverts commit e1bf29314f.
I'm not sure why this broke stuff, I need to investigate later.
			
			
This commit is contained in:
		
							parent
							
								
									e1bf29314f
								
							
						
					
					
						commit
						79d96b42df
					
				
					 1 changed files with 15 additions and 29 deletions
				
			
		
							
								
								
									
										44
									
								
								gc.c
									
										
									
									
									
								
							
							
						
						
									
										44
									
								
								gc.c
									
										
									
									
									
								
							|  | @ -8553,14 +8553,14 @@ gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_doubl | |||
|         heap_add_pages(objspace, heap_eden, heap_allocated_pages); | ||||
|     } | ||||
| 
 | ||||
|     VALUE moved_list_head; | ||||
|     VALUE moved_list; | ||||
|     VALUE disabled = rb_gc_disable(); | ||||
| 
 | ||||
|     if (use_toward_empty) { | ||||
|         moved_list_head = gc_compact_heap(objspace, compare_free_slots); | ||||
|         moved_list = gc_compact_heap(objspace, compare_free_slots); | ||||
|     } | ||||
|     else { | ||||
|         moved_list_head = gc_compact_heap(objspace, compare_pinned); | ||||
|         moved_list = gc_compact_heap(objspace, compare_pinned); | ||||
|     } | ||||
|     heap_eden->freelist = NULL; | ||||
| 
 | ||||
|  | @ -8573,46 +8573,32 @@ gc_compact_after_gc(rb_objspace_t *objspace, int use_toward_empty, int use_doubl | |||
| 
 | ||||
|     rb_clear_method_cache_by_class(rb_cObject); | ||||
|     rb_clear_constant_cache(); | ||||
|     heap_eden->free_pages = NULL; | ||||
|     heap_eden->using_page = NULL; | ||||
| 
 | ||||
|     /* Clear RMOVED manual rather than rely on GC */ | ||||
|     while (moved_list_head) { | ||||
|     while (moved_list) { | ||||
|         VALUE next_moved; | ||||
|         struct heap_page *page; | ||||
| 
 | ||||
|         page = GET_HEAP_PAGE(moved_list_head); | ||||
|         next_moved = RMOVED(moved_list_head)->next; | ||||
|         page = GET_HEAP_PAGE(moved_list); | ||||
|         next_moved = RMOVED(moved_list)->next; | ||||
| 
 | ||||
|         RMOVED(moved_list_head)->flags = 0; | ||||
|         RMOVED(moved_list_head)->destination = 0; | ||||
|         RMOVED(moved_list_head)->next = 0; | ||||
|         RMOVED(moved_list)->flags = 0; | ||||
|         RMOVED(moved_list)->destination = 0; | ||||
|         RMOVED(moved_list)->next = 0; | ||||
|         page->free_slots++; | ||||
|         heap_page_add_freeobj(objspace, page, moved_list_head); | ||||
|         heap_page_add_freeobj(objspace, page, moved_list); | ||||
|         if (page->free_slots == page->total_slots && heap_pages_freeable_pages > 0) { | ||||
|             heap_pages_freeable_pages--; | ||||
| 	    heap_unlink_page(objspace, heap_eden, page); | ||||
| 	    heap_add_page(objspace, heap_tomb, page); | ||||
|         } | ||||
|         objspace->profile.total_freed_objects++; | ||||
|         moved_list_head = next_moved; | ||||
|     } | ||||
| 
 | ||||
|     heap_eden->free_pages = NULL; | ||||
| 
 | ||||
|     /* Rebuild free_pages linked list */ | ||||
|     size_t i; | ||||
|     for (i = 0; i < heap_allocated_pages; ++i) { | ||||
|         struct heap_page *page = heap_pages_sorted[i]; | ||||
|         if (page->free_slots > 0) { | ||||
|             page->free_next = heap_eden->free_pages; | ||||
|             heap_eden->free_pages = page; | ||||
|         } else { | ||||
|         } else if (page->free_slots == page->total_slots) { | ||||
|             page->free_next = NULL; | ||||
|         } | ||||
|         objspace->profile.total_freed_objects++; | ||||
|         moved_list = next_moved; | ||||
|     } | ||||
| 
 | ||||
|     heap_eden->using_page = heap_eden->free_pages; | ||||
|     heap_eden->free_pages = heap_eden->free_pages->free_next; | ||||
| 
 | ||||
|     if (use_verifier) { | ||||
|         gc_verify_internal_consistency(objspace); | ||||
|     } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Aaron Patterson
						Aaron Patterson