]> git.meshlink.io Git - meshlink/commitdiff
Dirty draft: use signal trigger to notify event loop about incoming data from the...
authorSaverio Proto <zioproto@gmail.com>
Sun, 1 Jun 2014 14:20:33 +0000 (16:20 +0200)
committerSaverio Proto <zioproto@gmail.com>
Sun, 1 Jun 2014 14:20:33 +0000 (16:20 +0200)
src/meshlink.c
src/meshlink.h
src/meshlink_internal.h
src/net.c
src/net.h

index eac80c278dea42d2502bcc833779f5c59fea2cf5..122afa58dd2763ed6d6dc3e102295def5ae62aae 100644 (file)
@@ -859,7 +859,7 @@ bool meshlink_send(meshlink_handle_t *mesh, meshlink_node_t *destination, const
        pthread_mutex_unlock(&(mesh->outpacketqueue_mutex));
 
        //notify event loop
-
+       signal_trigger(&(mesh->loop),&(mesh->datafromapp));
 }
 
 bool meshlink_send_from_queue (meshlink_handle_t *mesh,outpacketqueue_t* p) {
index 36c784c9ed9b7a52c7a7421254694856d888b5a6..342657db0f03fc06852827340a8a0680e219f044 100644 (file)
@@ -39,6 +39,11 @@ typedef enum {
        MESHLINK_ENOMEM, // Out of memory
        MESHLINK_ENOENT, // Node is not known
 } meshlink_errno_t;
+typedef struct outpacketqueue {
+       meshlink_node_t *destination;
+       const void *data;
+       unsigned int len;
+} outpacketqueue_t;
 
 #ifndef MESHLINK_INTERNAL_H
 
@@ -191,6 +196,8 @@ extern void meshlink_set_log_cb(meshlink_handle_t *mesh, meshlink_log_level_t le
  */
 extern bool meshlink_send(meshlink_handle_t *mesh, meshlink_node_t *destination, const void *data, unsigned int len);
 
+extern bool meshlink_send_from_queue (meshlink_handle_t *mesh,outpacketqueue_t* p);
+
 /// Get a handle for a specific node.
 /** This function returns a handle for the node with the given name.
  *
index c75311bb55a620a3500576daf5792d875edebb2c..c58c477388620198143136e6603e274cbc129a3f 100644 (file)
@@ -64,6 +64,7 @@ struct meshlink_handle {
        event_loop_t loop;
        listen_socket_t listen_socket[MAXSOCKETS];
        int listen_sockets;
+       signal_t datafromapp;
 
        struct node_t *self;
 
index deac6eee42a612a57ef3e621a0eb657f0b924913..15a4831f44cf430519b7842e65953b2c790577a4 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -269,6 +269,10 @@ int main_loop(meshlink_handle_t *mesh) {
        timeout_add(&mesh->loop, &mesh->pingtimer, timeout_handler, &mesh->pingtimer, &(struct timeval){mesh->pingtimeout, rand() % 100000});
        timeout_add(&mesh->loop, &mesh->periodictimer, periodic_handler, &mesh->periodictimer, &(struct timeval){mesh->pingtimeout, rand() % 100000});
 
+       //Add signal handler
+       //mesh->datafromapp = {0};
+       signal_add(&(mesh->loop),&(mesh->datafromapp), meshlink_send_from_queue,NULL, SIGTERM);
+
        if(!event_loop_run(&mesh->loop)) {
                logger(DEBUG_ALWAYS, LOG_ERR, "Error while waiting for input: %s", strerror(errno));
                return 1;
index 27ea3d14128aeebf77e413e21cb8c7671bb6e743..55c046efae54cbd9297a695f8950e48e6b5cf967 100644 (file)
--- a/src/net.h
+++ b/src/net.h
@@ -68,11 +68,6 @@ typedef struct outgoing_t {
        timeout_t ev;
 } outgoing_t;
 
-typedef struct outpacketqueue {
-       meshlink_node_t *destination;
-       const void *data;
-       unsigned int len;
-} outpacketqueue_t;
 
 extern int maxoutbufsize;
 extern int addressfamily;