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

Reply via email to