Exemplo n.º 1
0
static void
_tarif_clear(gint tarif_id)
{
  GSList **tarif = NULL;
  GSList *link = NULL;
  CCL_tarifpart *tp = NULL;
  GData *freed = NULL;

  tarif = g_new0(GSList *, 1);
  *tarif = g_datalist_id_get_data(&ccl->tarifs, tarif_id);

  g_assert(NULL != tarif);
  
  g_datalist_init(&freed);

  while ((link = g_slist_last(*tarif)) && *tarif)
    {
      *tarif = g_slist_remove_link(*tarif, link);
      tp = (CCL_tarifpart *) link->data;
      if (!g_datalist_id_get_data(&freed, GPOINTER_TO_INT(tp->prices)))
	{
	  g_datalist_clear(tp->prices);
	  g_datalist_id_set_data(&freed, GPOINTER_TO_INT(tp->prices),
				 (void *)tp->prices);
	  g_free(tp->prices);
	}
      g_slist_free_1(link);
      g_free(tp);
    }
  g_datalist_clear(&freed);
  *tarif = NULL;
  g_datalist_id_remove_data(&ccl->tarifs, tarif_id);
  g_free(tarif);
}
Exemplo n.º 2
0
int gs_pop_transaction(unsigned short id)
{
  GData* transact_data    = (GData*)thread_tls_get(&tls_transact_data);
  transaction_t* transact = g_datalist_id_get_data(&transact_data, (GQuark)id);
  if(!transact) return -1;

  if(transact->extra)
    free(transact->extra);
  g_datalist_id_remove_data(&transact_data, (GQuark)id);
  thread_tls_set(&tls_transact_data, transact_data);
  return 0;
}
Exemplo n.º 3
0
int gs_call_transaction(cid_t client_id, unsigned short id,
			nethost_t* client, nethost_t* server)
{
  int retval;
  GData* transact_data    = (GData*)thread_tls_get(&tls_transact_data);
  transaction_t* transact = g_datalist_id_get_data(&transact_data, (GQuark)id);
  if(!transact) return -1;

  retval = transact->function(client_id, client, server, transact->extra);

  if(transact->extra)
    free(transact->extra);
  g_datalist_id_remove_data(&transact_data, (GQuark)id);
  thread_tls_set(&tls_transact_data, transact_data);
  return retval;
}