Ejemplo n.º 1
0
static IrisArbiter*
iris_coordination_arbiter_new (IrisReceiver *exclusive,
                               IrisReceiver *concurrent,
                               IrisReceiver *teardown)
{
	IrisCoordinationArbiter *arbiter;

	g_return_val_if_fail (exclusive  == NULL || IRIS_IS_RECEIVER (exclusive),  NULL);
	g_return_val_if_fail (concurrent == NULL || IRIS_IS_RECEIVER (concurrent), NULL);
	g_return_val_if_fail (teardown   == NULL || IRIS_IS_RECEIVER (teardown),   NULL);

	g_return_val_if_fail (!exclusive  || exclusive  != concurrent, NULL);
	g_return_val_if_fail (!teardown   || exclusive  != teardown,   NULL);
	g_return_val_if_fail (!concurrent || concurrent != teardown,   NULL);
	g_return_val_if_fail (exclusive   || concurrent || teardown,   NULL);
	
	arbiter = g_object_new (IRIS_TYPE_COORDINATION_ARBITER, NULL);
	arbiter->priv->exclusive = exclusive ? g_object_ref (exclusive) : NULL;
	arbiter->priv->concurrent = concurrent ? g_object_ref (concurrent) : NULL;
	arbiter->priv->teardown = teardown ? g_object_ref (teardown) : NULL;

	ATTACH_ARBITER (exclusive, arbiter);
	ATTACH_ARBITER (concurrent, arbiter);
	ATTACH_ARBITER (teardown, arbiter);

	return IRIS_ARBITER (arbiter);
}
Ejemplo n.º 2
0
static IrisArbiter*
iris_coordination_arbiter_new (IrisReceiver *exclusive,
                               IrisReceiver *concurrent,
                               IrisReceiver *teardown)
{
	IrisCoordinationArbiter *arbiter;

	g_return_val_if_fail (exclusive  == NULL || IRIS_IS_RECEIVER (exclusive),  NULL);
	g_return_val_if_fail (concurrent == NULL || IRIS_IS_RECEIVER (concurrent), NULL);
	g_return_val_if_fail (teardown   == NULL || IRIS_IS_RECEIVER (teardown),   NULL);

	g_return_val_if_fail (!exclusive  || exclusive  != concurrent, NULL);
	g_return_val_if_fail (!teardown   || exclusive  != teardown,   NULL);
	g_return_val_if_fail (!concurrent || concurrent != teardown,   NULL);
	g_return_val_if_fail (exclusive   || concurrent || teardown,   NULL);
	
	arbiter = g_object_new (IRIS_TYPE_COORDINATION_ARBITER, NULL);
	arbiter->priv->exclusive = exclusive ? g_object_ref (exclusive) : NULL;
	arbiter->priv->concurrent = concurrent ? g_object_ref (concurrent) : NULL;
	arbiter->priv->teardown = teardown ? g_object_ref (teardown) : NULL;

	ATTACH_ARBITER (exclusive, arbiter);
	ATTACH_ARBITER (concurrent, arbiter);
	ATTACH_ARBITER (teardown, arbiter);

	if (concurrent)
		arbiter->priv->flags = IRIS_COORD_CONCURRENT;
	else
		arbiter->priv->flags = IRIS_COORD_EXCLUSIVE;

	/* At least one receiver holds a reference on the arbiter so we can drop
	 * the initial one.
	 */
	g_object_unref (arbiter);

	return IRIS_ARBITER (arbiter);
}