eal: allow to override init macros per OS
[dpdk.git] / lib / librte_eal / common / eal_common_proc.c
index 97663d3..b46d644 100644 (file)
@@ -37,6 +37,7 @@ static int mp_fd = -1;
 static char mp_filter[PATH_MAX];   /* Filter for secondary process sockets */
 static char mp_dir_path[PATH_MAX]; /* The directory path for all mp sockets */
 static pthread_mutex_t mp_mutex_action = PTHREAD_MUTEX_INITIALIZER;
+static char peer_name[PATH_MAX];
 
 struct action_entry {
        TAILQ_ENTRY(action_entry) next;
@@ -511,9 +512,9 @@ async_reply_handle(void *arg)
 static int
 open_socket_fd(void)
 {
-       char peer_name[PATH_MAX] = {0};
        struct sockaddr_un un;
 
+       peer_name[0] = '\0';
        if (rte_eal_process_type() == RTE_PROC_SECONDARY)
                snprintf(peer_name, sizeof(peer_name),
                                "%d_%"PRIx64, getpid(), rte_rdtsc());
@@ -542,27 +543,17 @@ open_socket_fd(void)
        return mp_fd;
 }
 
-static int
-unlink_sockets(const char *filter)
+static void
+close_socket_fd(void)
 {
-       int dir_fd;
-       DIR *mp_dir;
-       struct dirent *ent;
-
-       mp_dir = opendir(mp_dir_path);
-       if (!mp_dir) {
-               RTE_LOG(ERR, EAL, "Unable to open directory %s\n", mp_dir_path);
-               return -1;
-       }
-       dir_fd = dirfd(mp_dir);
+       char path[PATH_MAX];
 
-       while ((ent = readdir(mp_dir))) {
-               if (fnmatch(filter, ent->d_name, 0) == 0)
-                       unlinkat(dir_fd, ent->d_name, 0);
-       }
+       if (mp_fd < 0)
+               return;
 
-       closedir(mp_dir);
-       return 0;
+       close(mp_fd);
+       create_socket_path(peer_name, path, sizeof(path));
+       unlink(path);
 }
 
 int
@@ -603,13 +594,6 @@ rte_mp_channel_init(void)
                return -1;
        }
 
-       if (rte_eal_process_type() == RTE_PROC_PRIMARY &&
-                       unlink_sockets(mp_filter)) {
-               RTE_LOG(ERR, EAL, "failed to unlink mp sockets\n");
-               close(dir_fd);
-               return -1;
-       }
-
        if (open_socket_fd() < 0) {
                close(dir_fd);
                return -1;
@@ -632,6 +616,12 @@ rte_mp_channel_init(void)
        return 0;
 }
 
+void
+rte_mp_channel_cleanup(void)
+{
+       close_socket_fd();
+}
+
 /**
  * Return -1, as fail to send message and it's caused by the local side.
  * Return 0, as fail to send message and it's caused by the remote side.
@@ -800,7 +790,7 @@ mp_request_async(const char *dst, struct rte_mp_msg *req,
 {
        struct rte_mp_msg *reply_msg;
        struct pending_request *pending_req, *exist;
-       int ret;
+       int ret = -1;
 
        pending_req = calloc(1, sizeof(*pending_req));
        reply_msg = calloc(1, sizeof(*reply_msg));
@@ -837,16 +827,17 @@ mp_request_async(const char *dst, struct rte_mp_msg *req,
                ret = 0;
                goto fail;
        }
-       TAILQ_INSERT_TAIL(&pending_requests.requests, pending_req, next);
-
        param->user_reply.nb_sent++;
 
+       /* if alarm set fails, we simply ignore the reply */
        if (rte_eal_alarm_set(ts->tv_sec * 1000000 + ts->tv_nsec / 1000,
                              async_reply_handle, pending_req) < 0) {
                RTE_LOG(ERR, EAL, "Fail to set alarm for request %s:%s\n",
                        dst, req->name);
-               rte_panic("Fix the above shit to properly free all memory\n");
+               ret = -1;
+               goto fail;
        }
+       TAILQ_INSERT_TAIL(&pending_requests.requests, pending_req, next);
 
        return 0;
 fail: