From bedd1d4eadde9ab64f924c69eba716b015599e67 Mon Sep 17 00:00:00 2001
From: dimitri staessens <dimitri.staessens@ugent.be>
Date: Thu, 12 Oct 2017 02:15:39 +0200
Subject: lib: Deprecate ouroboros_init and ourboros_fini

This commit deprecates ouroboros_init and ouroboros_fini and adds them
as a constructor or destructor, causing these function to be run
automatically when a program that links to the library calls and exits
main(). For this to fully work, the library had to be split so that we
can avoid the irmd calling these functions (the IRMd has to create the
shm structures on which these calls depend).

The library is split in 3 parts: libouroboros-dev, libouroboros-irm
and libouroboros-common. The latter is linked to the other two so that
including libouroboros-dev or libouroboros-irm will also link
libouroboros-common.
---
 src/ipcpd/normal/CMakeLists.txt           | 2 +-
 src/ipcpd/normal/dht.c                    | 9 +++++----
 src/ipcpd/normal/main.c                   | 2 +-
 src/ipcpd/normal/pol/tests/CMakeLists.txt | 2 +-
 src/ipcpd/normal/tests/CMakeLists.txt     | 2 +-
 5 files changed, 9 insertions(+), 8 deletions(-)

(limited to 'src/ipcpd/normal')

diff --git a/src/ipcpd/normal/CMakeLists.txt b/src/ipcpd/normal/CMakeLists.txt
index 8dbe4820..dd67ce05 100644
--- a/src/ipcpd/normal/CMakeLists.txt
+++ b/src/ipcpd/normal/CMakeLists.txt
@@ -50,7 +50,7 @@ set(SOURCE_FILES
 
 add_executable(ipcpd-normal ${SOURCE_FILES} ${IPCP_SOURCES}
   ${FLOW_ALLOC_SRCS} ${LS_PROTO_SRCS} ${KAD_PROTO_SRCS} ${ENROLL_PROTO_SRCS})
-target_link_libraries(ipcpd-normal LINK_PUBLIC ouroboros)
+target_link_libraries(ipcpd-normal LINK_PUBLIC ouroboros-dev ouroboros-irm)
 
 include(AddCompileFlags)
 if (CMAKE_BUILD_TYPE MATCHES Debug)
diff --git a/src/ipcpd/normal/dht.c b/src/ipcpd/normal/dht.c
index 7ca555ab..161bf292 100644
--- a/src/ipcpd/normal/dht.c
+++ b/src/ipcpd/normal/dht.c
@@ -1420,7 +1420,9 @@ static int send_msg(struct dht * dht,
                     kad_msg_t *  msg,
                     uint64_t     addr)
 {
+#ifndef __DHT_TEST__
         struct shm_du_buff * sdb;
+#endif
         size_t               len;
         int                  retr = 0;
 
@@ -1451,12 +1453,11 @@ static int send_msg(struct dht * dht,
         if (len == 0)
                 goto fail_msg;
 
+#ifndef __DHT_TEST__
         if (ipcp_sdb_reserve(&sdb, len))
                 goto fail_msg;
-
         kad_msg__pack(msg, shm_du_buff_head(sdb));
 
-#ifndef __DHT_TEST__
         while (retr >= 0) {
                 if (dt_write_sdu(addr, QOS_CUBE_BE, dht->fd, sdb))
                         retr--;
@@ -1470,7 +1471,6 @@ static int send_msg(struct dht * dht,
 #else
         (void) addr;
         (void) retr;
-        ipcp_sdb_release(sdb);
 #endif /* __DHT_TEST__ */
 
         if (msg->code < KAD_STORE && dht_get_state(dht) != DHT_SHUTDOWN)
@@ -2363,8 +2363,9 @@ static void * dht_handle_sdu(void * o)
                 i = shm_du_buff_tail(cmd->sdb) - shm_du_buff_head(cmd->sdb);
 
                 msg = kad_msg__unpack(NULL, i, shm_du_buff_head(cmd->sdb));
-
+#ifndef __DHT_TEST__
                 ipcp_sdb_release(cmd->sdb);
+#endif
                 free(cmd);
 
                 if (msg == NULL) {
diff --git a/src/ipcpd/normal/main.c b/src/ipcpd/normal/main.c
index 8c16fd22..719be77c 100644
--- a/src/ipcpd/normal/main.c
+++ b/src/ipcpd/normal/main.c
@@ -299,7 +299,7 @@ static struct ipcp_ops normal_ops = {
 int main(int    argc,
          char * argv[])
 {
-        if (ipcp_init(argc, argv, THIS_TYPE, &normal_ops) < 0) {
+        if (ipcp_init(argc, argv, &normal_ops) < 0) {
                 log_err("Failed to init IPCP.");
                 goto fail_init;
         }
diff --git a/src/ipcpd/normal/pol/tests/CMakeLists.txt b/src/ipcpd/normal/pol/tests/CMakeLists.txt
index 55ca425a..d0652533 100644
--- a/src/ipcpd/normal/pol/tests/CMakeLists.txt
+++ b/src/ipcpd/normal/pol/tests/CMakeLists.txt
@@ -21,7 +21,7 @@ create_test_sourcelist(${PARENT_DIR}_tests test_suite.c
   )
 
 add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${${PARENT_DIR}_tests})
-target_link_libraries(${PARENT_DIR}_test ouroboros)
+target_link_libraries(${PARENT_DIR}_test ouroboros-common)
 
 add_dependencies(check ${PARENT_DIR}_test)
 
diff --git a/src/ipcpd/normal/tests/CMakeLists.txt b/src/ipcpd/normal/tests/CMakeLists.txt
index d975caf6..be92888f 100644
--- a/src/ipcpd/normal/tests/CMakeLists.txt
+++ b/src/ipcpd/normal/tests/CMakeLists.txt
@@ -24,7 +24,7 @@ set_source_files_properties(${KAD_PROTO_SRCS} PROPERTIES GENERATED TRUE)
 
 add_executable(${PARENT_DIR}_test EXCLUDE_FROM_ALL ${${PARENT_DIR}_tests}
   ${KAD_PROTO_SRCS})
-target_link_libraries(${PARENT_DIR}_test ouroboros)
+target_link_libraries(${PARENT_DIR}_test ouroboros-common)
 
 add_dependencies(check ${PARENT_DIR}_test)
 
-- 
cgit v1.2.3