/* * FIXME: 1) remove _set_address, make this function callable with result of same * 2) differentiate between reasons for "we didn't add" (now -1 in all cases) */ int network_backends_add(network_backends_t *bs, /* const */ gchar *address, backend_type_t type) { network_backend_t *new_backend; guint i; new_backend = network_backend_new(); new_backend->type = type; if (0 != network_address_set_address(new_backend->addr, address)) { network_backend_free(new_backend); return -1; } /* check if this backend is already known */ g_mutex_lock(bs->backends_mutex); for (i = 0; i < bs->backends->len; i++) { network_backend_t *old_backend = bs->backends->pdata[i]; if (strleq(S(old_backend->addr->name), S(new_backend->addr->name))) { network_backend_free(new_backend); g_mutex_unlock(bs->backends_mutex); g_critical("backend %s is already known!", address); return -1; } } g_ptr_array_add(bs->backends, new_backend); g_mutex_unlock(bs->backends_mutex); g_message("added %s backend: %s", (type == BACKEND_TYPE_RW) ? "read/write" : "read-only", address); return 0; }
/* * FIXME: 1) remove _set_address, make this function callable with result of same * 2) differentiate between reasons for "we didn't add" (now -1 in all cases) */ int network_backends_add(network_backends_t *bs, /* const */ gchar *address, backend_type_t type) { network_backend_t *new_backend; guint i; new_backend = network_backend_new(bs->event_thread_count); new_backend->type = type; gchar *p = NULL; if (type == BACKEND_TYPE_RO) { guint weight = 1; p = strrchr(address, '@'); if (p != NULL) { *p = '\0'; weight = atoi(p+1); } new_backend->weight = weight; } if (0 != network_address_set_address(new_backend->addr, address)) { network_backend_free(new_backend); return -1; } /* check if this backend is already known */ g_mutex_lock(bs->backends_mutex); /*remove lock*/ gint first_slave = -1; for (i = 0; i < bs->backends->len; i++) { network_backend_t *old_backend = bs->backends->pdata[i]; if (first_slave == -1 && old_backend->type == BACKEND_TYPE_RO) first_slave = i; if (old_backend->type == type && strleq(S(old_backend->addr->name), S(new_backend->addr->name))) { network_backend_free(new_backend); g_mutex_unlock(bs->backends_mutex); /*remove lock*/ g_critical("backend %s is already known!", address); return -1; } } g_ptr_array_add(bs->backends, new_backend); if (first_slave != -1 && type == BACKEND_TYPE_RW) { network_backend_t *temp_backend = bs->backends->pdata[first_slave]; bs->backends->pdata[first_slave] = bs->backends->pdata[bs->backends->len - 1]; bs->backends->pdata[bs->backends->len - 1] = temp_backend; } g_mutex_unlock(bs->backends_mutex); /*remove lock*/ g_message("added %s backend: %s", (type == BACKEND_TYPE_RW) ? "read/write" : "read-only", address); if (p != NULL) *p = '@'; return 0; }
/** * @deprecated: will be removed in 1.0 * @see network_backend_new() */ network_backend_t *backend_init() { return network_backend_new(); }