コード例 #1
0
ファイル: sgen-bridge.c プロジェクト: Adamcbrz/mono
void
sgen_bridge_processing_finish (int generation)
{
	unsigned long step_8;
	SGEN_TV_DECLARE (atv);
	SGEN_TV_DECLARE (btv);

	bridge_processor.processing_build_callback_data (generation);
	if (compare_bridge_processors ())
		compare_to_bridge_processor.processing_build_callback_data (generation);

	if (bridge_processor.num_sccs == 0) {
		g_assert (bridge_processor.num_xrefs == 0);
		goto after_callback;
	}

	bridge_callbacks.cross_references (bridge_processor.num_sccs, bridge_processor.api_sccs,
			bridge_processor.num_xrefs, bridge_processor.api_xrefs);

	if (compare_bridge_processors ())
		sgen_compare_bridge_processor_results (&bridge_processor, &compare_to_bridge_processor);

	SGEN_TV_GETTIME (btv);

	null_weak_links_to_dead_objects (&bridge_processor, generation);

	free_callback_data (&bridge_processor);
	if (compare_bridge_processors ())
		free_callback_data (&compare_to_bridge_processor);

	SGEN_TV_GETTIME (atv);
	step_8 = SGEN_TV_ELAPSED (btv, atv);

 after_callback:
	bridge_processor.processing_after_callback (generation);
	if (compare_bridge_processors ())
		compare_to_bridge_processor.processing_after_callback (generation);

	bridge_processing_in_progress = FALSE;
}
コード例 #2
0
static void
ms_wait_for_sweep_done (void)
{
	SGEN_TV_DECLARE (atv);
	SGEN_TV_DECLARE (btv);
	int result;

	if (!concurrent_sweep)
		return;

	if (!ms_sweep_in_progress)
		return;

	SGEN_TV_GETTIME (atv);
	while ((result = MONO_SEM_WAIT (&ms_sweep_done_semaphore)) != 0) {
		if (errno != EINTR)
			g_error ("MONO_SEM_WAIT");
	}
	SGEN_TV_GETTIME (btv);
	stat_time_wait_for_sweep += SGEN_TV_ELAPSED_MS (atv, btv);

	g_assert (ms_sweep_in_progress);
	ms_sweep_in_progress = FALSE;
}