From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) by dpdk.org (Postfix) with ESMTP id 9DAA14CA5 for ; Sun, 11 Mar 2018 10:02:27 +0100 (CET) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga003.jf.intel.com ([10.7.209.27]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 11 Mar 2018 01:02:25 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.47,455,1515484800"; d="scan'208";a="34052077" Received: from tanjianf-mobl.ccr.corp.intel.com (HELO [10.255.27.216]) ([10.255.27.216]) by orsmga003.jf.intel.com with ESMTP; 11 Mar 2018 01:02:22 -0800 To: Anatoly Burakov , dev@dpdk.org References: <926e06a32994c286244b5620e6821e8f83c10ffe.1520424998.git.anatoly.burakov@intel.com> Cc: keith.wiles@intel.com, konstantin.ananyev@intel.com From: "Tan, Jianfeng" Message-ID: <516bd264-f921-92e9-db46-b6af372659b8@intel.com> Date: Sun, 11 Mar 2018 17:02:21 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.8.0 MIME-Version: 1.0 In-Reply-To: <926e06a32994c286244b5620e6821e8f83c10ffe.1520424998.git.anatoly.burakov@intel.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH v5 2/6] eal: abstract away IPC socket path generation X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 11 Mar 2018 09:02:28 -0000 On 3/8/2018 12:56 AM, Anatoly Burakov wrote: > Signed-off-by: Anatoly Burakov Acked-by: Jianfeng Tan Thanks, Jianfeng > --- > > Notes: > v5: remove lock files, leaving only socket paths code > > v4: replace lock files with init files > > lib/librte_eal/common/eal_common_proc.c | 48 ++++++++++++++++----------------- > 1 file changed, 23 insertions(+), 25 deletions(-) > > diff --git a/lib/librte_eal/common/eal_common_proc.c b/lib/librte_eal/common/eal_common_proc.c > index da7930f..1aab3ac 100644 > --- a/lib/librte_eal/common/eal_common_proc.c > +++ b/lib/librte_eal/common/eal_common_proc.c > @@ -91,6 +91,17 @@ find_sync_request(const char *dst, const char *act_name) > return r; > } > > +static void > +create_socket_path(const char *name, char *buf, int len) > +{ > + const char *prefix = eal_mp_socket_path(); > + > + if (strlen(name) > 0) > + snprintf(buf, len, "%s_%s", prefix, name); > + else > + snprintf(buf, len, "%s", prefix); > +} > + > int > rte_eal_primary_proc_alive(const char *config_file_path) > { > @@ -290,8 +301,12 @@ mp_handle(void *arg __rte_unused) > static int > open_socket_fd(void) > { > + char peer_name[PATH_MAX] = {0}; > struct sockaddr_un un; > - const char *prefix = eal_mp_socket_path(); > + > + if (rte_eal_process_type() == RTE_PROC_SECONDARY) > + snprintf(peer_name, sizeof(peer_name), > + "%d_%"PRIx64, getpid(), rte_rdtsc()); > > mp_fd = socket(AF_UNIX, SOCK_DGRAM, 0); > if (mp_fd < 0) { > @@ -301,13 +316,11 @@ open_socket_fd(void) > > memset(&un, 0, sizeof(un)); > un.sun_family = AF_UNIX; > - if (rte_eal_process_type() == RTE_PROC_PRIMARY) > - snprintf(un.sun_path, sizeof(un.sun_path), "%s", prefix); > - else { > - snprintf(un.sun_path, sizeof(un.sun_path), "%s_%d_%"PRIx64, > - prefix, getpid(), rte_rdtsc()); > - } > + > + create_socket_path(peer_name, un.sun_path, sizeof(un.sun_path)); > + > unlink(un.sun_path); /* May still exist since last run */ > + > if (bind(mp_fd, (struct sockaddr *)&un, sizeof(un)) < 0) { > RTE_LOG(ERR, EAL, "failed to bind %s: %s\n", > un.sun_path, strerror(errno)); > @@ -342,20 +355,6 @@ unlink_sockets(const char *filter) > return 0; > } > > -static void > -unlink_socket_by_path(const char *path) > -{ > - char *filename; > - char *fullpath = strdup(path); > - > - if (!fullpath) > - return; > - filename = basename(fullpath); > - unlink_sockets(filename); > - free(fullpath); > - RTE_LOG(INFO, EAL, "Remove socket %s\n", path); > -} > - > int > rte_mp_channel_init(void) > { > @@ -444,10 +443,9 @@ send_msg(const char *dst_path, struct rte_mp_msg *msg, int type) > if (snd < 0) { > rte_errno = errno; > /* Check if it caused by peer process exits */ > - if (errno == ECONNREFUSED) { > - /* We don't unlink the primary's socket here */ > - if (rte_eal_process_type() == RTE_PROC_PRIMARY) > - unlink_socket_by_path(dst_path); > + if (errno == ECONNREFUSED && > + rte_eal_process_type() == RTE_PROC_PRIMARY) { > + unlink(dst_path); > return 0; > } > if (errno == ENOBUFS) {