small bugfixes, chasing segfault
This commit is contained in:
parent
5404fce6ec
commit
4b1cd8cb11
3 changed files with 23 additions and 1 deletions
20
core/api.c
20
core/api.c
|
@ -698,6 +698,20 @@ void *api_listen_thread (void *ptr)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct ApiContext* api_context_new() {
|
||||||
|
struct ApiContext* context = (struct ApiContext*) malloc(sizeof(struct ApiContext));
|
||||||
|
if (context != NULL) {
|
||||||
|
context->conns = NULL;
|
||||||
|
context->conns_count = 0;
|
||||||
|
context->ipv4 = 0;
|
||||||
|
context->max_conns = 0;
|
||||||
|
context->port = 0;
|
||||||
|
context->socket = 0;
|
||||||
|
context->timeout = 0;
|
||||||
|
}
|
||||||
|
return context;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Start API interface daemon.
|
* Start API interface daemon.
|
||||||
* @param local_node the context
|
* @param local_node the context
|
||||||
|
@ -716,6 +730,12 @@ int api_start (struct IpfsNode* local_node, int max_conns, int timeout)
|
||||||
multiaddress_get_ip_address(my_address, &ip);
|
multiaddress_get_ip_address(my_address, &ip);
|
||||||
int port = multiaddress_get_ip_port(my_address);
|
int port = multiaddress_get_ip_port(my_address);
|
||||||
|
|
||||||
|
local_node->api_context = api_context_new();
|
||||||
|
if (local_node->api_context == NULL) {
|
||||||
|
multiaddress_free(my_address);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
local_node->api_context->ipv4 = hostname_to_ip(ip); // api is listening only on loopback.
|
local_node->api_context->ipv4 = hostname_to_ip(ip); // api is listening only on loopback.
|
||||||
local_node->api_context->port = port;
|
local_node->api_context->port = port;
|
||||||
|
|
||||||
|
|
|
@ -23,6 +23,7 @@ struct IpfsNode* ipfs_node_new() {
|
||||||
node->providerstore = NULL;
|
node->providerstore = NULL;
|
||||||
node->repo = NULL;
|
node->repo = NULL;
|
||||||
node->routing = NULL;
|
node->routing = NULL;
|
||||||
|
node->api_context = NULL;
|
||||||
}
|
}
|
||||||
return node;
|
return node;
|
||||||
}
|
}
|
||||||
|
@ -151,7 +152,7 @@ int ipfs_node_offline_new(const char* repo_path, struct IpfsNode** node) {
|
||||||
*/
|
*/
|
||||||
int ipfs_node_free(struct IpfsNode* node) {
|
int ipfs_node_free(struct IpfsNode* node) {
|
||||||
if (node != NULL) {
|
if (node != NULL) {
|
||||||
if (node->api_context->api_thread != NULL)
|
if (node->api_context != NULL && node->api_context->api_thread != 0)
|
||||||
api_stop(node);
|
api_stop(node);
|
||||||
if (node->exchange != NULL) {
|
if (node->exchange != NULL) {
|
||||||
node->exchange->Close(node->exchange);
|
node->exchange->Close(node->exchange);
|
||||||
|
|
|
@ -20,6 +20,7 @@ int test_core_api_startup_shutdown() {
|
||||||
test_daemon_start(repo_path);
|
test_daemon_start(repo_path);
|
||||||
sleep(3);
|
sleep(3);
|
||||||
|
|
||||||
|
// make a client to the api
|
||||||
struct IpfsNode* client_node = NULL;
|
struct IpfsNode* client_node = NULL;
|
||||||
if (!ipfs_node_offline_new(repo_path, &client_node)) {
|
if (!ipfs_node_offline_new(repo_path, &client_node)) {
|
||||||
goto exit;
|
goto exit;
|
||||||
|
|
Loading…
Reference in a new issue