Ack. Thanks, Ramesh.
On 8/31/2015 11:22 AM, [email protected] wrote: > osaf/libs/core/leap/os_defs.c | 20 +------------------- > osaf/libs/core/leap/sysf_mem.c | 2 +- > osaf/libs/core/mds/mds_dt_tcp.c | 16 +--------------- > 3 files changed, 3 insertions(+), 35 deletions(-) > > > Since Linux 2.6.27, socketpair() supports the SOCK_NONBLOCK and SOCK_CLOEXEC > flags described in socket(2). > Linux glibc 2.7 introduced the e flag to cause a close-on-exec flag upon open. > So optimized the code, this is useful as it avoid a race condition between > fopen() and a subsequent call to fcntl(). > > diff --git a/osaf/libs/core/leap/os_defs.c b/osaf/libs/core/leap/os_defs.c > --- a/osaf/libs/core/leap/os_defs.c > +++ b/osaf/libs/core/leap/os_defs.c > @@ -1060,21 +1060,11 @@ uint32_t ncs_sel_obj_create(NCS_SEL_OBJ > int s_pair[2]; > int flags = 0; > > - osaf_mutex_lock_ordie(&s_cloexec_mutex); > - if (0 != socketpair(AF_UNIX, SOCK_STREAM, 0, s_pair)) { > + if (0 != socketpair(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0, s_pair)) { > syslog(LOG_ERR, "%s: socketpair failed - %s", __FUNCTION__, > strerror(errno)); > - osaf_mutex_unlock_ordie(&s_cloexec_mutex); > return NCSCC_RC_FAILURE; > } > > - flags = fcntl(s_pair[0], F_GETFD, 0); > - fcntl(s_pair[0], F_SETFD, (flags | FD_CLOEXEC)); > - > - flags = fcntl(s_pair[1], F_GETFD, 0); > - fcntl(s_pair[1], F_SETFD, (flags | FD_CLOEXEC)); > - > - osaf_mutex_unlock_ordie(&s_cloexec_mutex); > - > if (s_pair[0] > s_pair[1]) { > /* Ensure s_pair[1] is equal or greater */ > int temp = s_pair[0]; > @@ -1293,18 +1283,10 @@ int ncs_sel_obj_rmv_ind(NCS_SEL_OBJ *i_i > FILE *ncs_os_fopen(const char *fpath, const char *fmode) > { > FILE *fp = NULL; > - int flags = 0; > - osaf_mutex_lock_ordie(&s_cloexec_mutex); > fp = fopen(fpath, fmode); > if (fp == NULL) { > - osaf_mutex_unlock_ordie(&s_cloexec_mutex); > return NULL; > } > > - flags = fcntl(fileno(fp), F_GETFD, 0); > - fcntl(fileno(fp), F_SETFD, (flags | FD_CLOEXEC)); > - > - osaf_mutex_unlock_ordie(&s_cloexec_mutex); > - > return fp; > } > diff --git a/osaf/libs/core/leap/sysf_mem.c b/osaf/libs/core/leap/sysf_mem.c > --- a/osaf/libs/core/leap/sysf_mem.c > +++ b/osaf/libs/core/leap/sysf_mem.c > @@ -1917,7 +1917,7 @@ uint32_t sysf_pick_output(char *str, cha > FILE *file; > > if (fname != NULL) { > - if ((file = ncs_os_fopen(fname, "at")) == NULL) > + if ((file = ncs_os_fopen(fname, "ate")) == NULL) > return NCSCC_RC_FAILURE; > fprintf(file, "%s\n", str); > fclose(file); > diff --git a/osaf/libs/core/mds/mds_dt_tcp.c b/osaf/libs/core/mds/mds_dt_tcp.c > --- a/osaf/libs/core/mds/mds_dt_tcp.c > +++ b/osaf/libs/core/mds/mds_dt_tcp.c > @@ -81,7 +81,6 @@ uint32_t mdtm_process_recv_events_tcp(vo > */ > uint32_t mds_mdtm_init_tcp(NODE_ID nodeid, uint32_t *mds_tcp_ref) > { > - uint32_t flags; > uint32_t sndbuf_size = 0; /* Send buffer size */ > uint32_t rcvbuf_size = 0; /* Receive buffer size */ > socklen_t optlen; /* Option length */ > @@ -125,7 +124,7 @@ uint32_t mds_mdtm_init_tcp(NODE_ID nodei > > /* Create the sockets required for Binding, Send, receive and Discovery > */ > > - tcp_cb->DBSRsock = socket(mds_socket_domain, SOCK_STREAM, 0); > + tcp_cb->DBSRsock = socket(mds_socket_domain, SOCK_STREAM|SOCK_CLOEXEC, > 0); > if (tcp_cb->DBSRsock < 0) { > syslog(LOG_ERR, "MDS:MDTM:TCP DBSRsock Socket creation failed > in MDTM_INIT err :%s", strerror(errno)); > return NCSCC_RC_FAILURE; > @@ -177,19 +176,6 @@ uint32_t mds_mdtm_init_tcp(NODE_ID nodei > return NCSCC_RC_FAILURE; > } > > - flags = fcntl(tcp_cb->DBSRsock, F_GETFD, 0); > - if ((flags < 0) || (flags > 1)) { > - syslog(LOG_ERR, "MDS:MDTM:TCP Unable to get the CLOEXEC Flag on > DBSRsock err :%s", strerror(errno)); > - close(tcp_cb->DBSRsock); > - return NCSCC_RC_FAILURE; > - } else { > - if (fcntl(tcp_cb->DBSRsock, F_SETFD, (flags | FD_CLOEXEC)) == > (-1)) { > - syslog(LOG_ERR, "MDS:MDTM:TCP Unable to set the CLOEXEC > Flag on DBSRsock err :%s", strerror(errno)); > - close(tcp_cb->DBSRsock); > - return NCSCC_RC_FAILURE; > - } > - } > - > tcp_cb->adest = ((uint64_t)(nodeid)) << 32; > tcp_cb->adest |= mdtm_pid; > tcp_cb->node_id = nodeid; ------------------------------------------------------------------------------ _______________________________________________ Opensaf-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/opensaf-devel
