void osync_plugin_info_unref(OSyncPluginInfo *info)
{
	osync_assert(info);
	
	if (g_atomic_int_dec_and_test(&(info->ref_count))) {
		if (info->config)
			osync_plugin_config_unref(info->config);
		
		if (info->configdir)
			osync_free(info->configdir);
		
		if (info->groupname)
			osync_free(info->groupname);
		
		while (info->objtype_sinks) {
			OSyncObjTypeSink *sink = info->objtype_sinks->data;
			osync_objtype_sink_unref(sink);
			info->objtype_sinks = osync_list_remove(info->objtype_sinks, sink);
		}
		
		if (info->main_sink)
			osync_objtype_sink_unref(info->main_sink);
			
		if (info->version)
			osync_version_unref(info->version);
			
		if (info->capabilities)
			osync_capabilities_unref(info->capabilities);

		if (info->formatenv)
			osync_format_env_unref(info->formatenv);
		
		osync_free(info);
	}
}
Esempio n. 2
0
static void free_env(plugin_environment *env)
{
	while (env->sink_envs) {
		sink_environment *sinkenv = env->sink_envs->data;

		if (sinkenv->sink)
			osync_objtype_sink_unref(sinkenv->sink);

		env->sink_envs = osync_list_remove(env->sink_envs, sinkenv);
	}

	osync_free(env);
}
Esempio n. 3
0
static void mock_finalize(void *data)
{
	mock_env *env = data;

	while (env->directories) {
		MockDir *dir = env->directories->data;

		osync_plugin_resource_unref(dir->res);
		osync_objformat_unref(dir->objformat);

		env->directories = g_list_remove(env->directories, dir);
		g_free(dir);
	}

	if (env->mainsink)
		osync_objtype_sink_unref(env->mainsink);


	g_free(env);
}