The function only needs the gray queue since it is tied to the object operations.
GrayQueue *queue = ctx.queue;
if (current_collection_generation == GENERATION_OLD && major_collector.drain_gray_stack)
- return major_collector.drain_gray_stack (ctx);
+ return major_collector.drain_gray_stack (queue);
do {
int i;
void (*finish_nursery_collection) (void);
void (*start_major_collection) (void);
void (*finish_major_collection) (ScannedObjectCounts *counts);
- gboolean (*drain_gray_stack) (ScanCopyContext ctx);
+ gboolean (*drain_gray_stack) (SgenGrayQueue *ctx);
gboolean (*ptr_is_in_non_pinned_space) (char *ptr, char **start);
gboolean (*ptr_is_from_pinned_alloc) (char *ptr);
void (*report_pinned_memory_usage) (void);
}
static gboolean
-DRAIN_GRAY_STACK_FUNCTION_NAME (ScanCopyContext ctx)
+DRAIN_GRAY_STACK_FUNCTION_NAME (SgenGrayQueue *queue)
{
- SgenGrayQueue *queue = ctx.queue;
-
- SGEN_ASSERT (0, ctx.ops->scan_object == major_scan_object_with_evacuation, "Wrong scan function");
-
for (;;) {
GCObject *obj;
SgenDescriptor desc;
if (!obj)
return TRUE;
- SCAN_OBJECT_FUNCTION_NAME (obj, desc, ctx.queue);
+ SCAN_OBJECT_FUNCTION_NAME (obj, desc, queue);
}
}
#include "sgen-marksweep-drain-gray-stack.h"
static gboolean
-drain_gray_stack (ScanCopyContext ctx)
+drain_gray_stack (SgenGrayQueue *queue)
{
gboolean evacuation = FALSE;
int i;
}
if (evacuation)
- return drain_gray_stack_with_evacuation (ctx);
+ return drain_gray_stack_with_evacuation (queue);
else
- return drain_gray_stack_no_evacuation (ctx);
+ return drain_gray_stack_no_evacuation (queue);
}
#include "sgen-marksweep-scan-object-concurrent.h"