static ret_t table_add_new_entry (cherokee_resolv_cache_t *resolv, cherokee_buffer_t *domain, cherokee_resolv_cache_entry_t **entry) { ret_t ret; cherokee_resolv_cache_entry_t *n = NULL; /* Instance the entry */ ret = entry_new (&n); if (unlikely (ret != ret_ok)) { return ret; } /* Fill it up */ ret = entry_fill_up (n, domain); if (unlikely (ret != ret_ok)) { entry_free (n); return ret; } /* Add it to the table */ CHEROKEE_RWLOCK_WRITER (&resolv->lock); ret = cherokee_avl_add (&resolv->table, domain, (void **)n); CHEROKEE_RWLOCK_UNLOCK (&resolv->lock); *entry = n; return ret_ok; }
static ret_t configure (cherokee_rule_fullpath_t *rule, cherokee_config_node_t *conf, cherokee_virtual_server_t *vsrv) { ret_t ret; cherokee_config_node_t *subconf; cherokee_list_t *i; UNUSED (vsrv); /* Get the entry */ ret = cherokee_config_node_get (conf, "fullpath", &subconf); if (ret != ret_ok) { LOG_CRITICAL (CHEROKEE_ERROR_RULE_NO_PROPERTY, RULE(rule)->priority, "fullpath"); return ret_error; } /* Add the paths */ cherokee_config_node_foreach (i, subconf) { cherokee_config_node_t *path = CONFIG_NODE(i); TRACE(ENTRIES, "Adding fullpath entry (key=%s): '%s'\n", path->key.buf, path->val.buf); cherokee_avl_add (&rule->paths, &path->val, NULL); }
ret_t cherokee_avl_r_add (cherokee_avl_r_t *avl_r, cherokee_buffer_t *key, void *value) { ret_t ret; CHEROKEE_RWLOCK_WRITER (AVL_R_LOCK(avl_r)); ret = cherokee_avl_add (&avl_r->avl, key, value); CHEROKEE_RWLOCK_UNLOCK (AVL_R_LOCK(avl_r)); return ret; }
ret_t cherokee_handler_proxy_hosts_get (cherokee_handler_proxy_hosts_t *hosts, cherokee_source_t *src, cherokee_handler_proxy_poll_t **poll, cuint_t reuse_max) { ret_t ret; CHEROKEE_MUTEX_LOCK (&hosts->hosts_mutex); /* Build the index name */ cherokee_buffer_clean (&hosts->tmp); cherokee_buffer_add_buffer (&hosts->tmp, &src->host); cherokee_buffer_add_char (&hosts->tmp, ':'); cherokee_buffer_add_ulong10 (&hosts->tmp, src->port); /* Check the hosts tree */ ret = cherokee_avl_get (&hosts->hosts, &hosts->tmp, (void **)poll); switch (ret) { case ret_ok: break; case ret_not_found: { cherokee_handler_proxy_poll_t *n; ret = cherokee_handler_proxy_poll_new (&n, reuse_max); if (ret != ret_ok) return ret; cherokee_avl_add (&hosts->hosts, &hosts->tmp, n); *poll = n; break; } default: goto error; } /* Got it */ CHEROKEE_MUTEX_UNLOCK (&hosts->hosts_mutex); return ret_ok; error: CHEROKEE_MUTEX_LOCK (&hosts->hosts_mutex); return ret_error; }