Author: glen Date: Sun Mar 22 00:26:52 2009 GMT Module: SOURCES Tag: HEAD ---- Log message: - updated from git: git log -p libtirpc-0-1-10..HEAD
---- Files affected: SOURCES: libtirpc-git.patch (1.1 -> 1.2) ---- Diffs: ================================================================ Index: SOURCES/libtirpc-git.patch diff -u SOURCES/libtirpc-git.patch:1.1 SOURCES/libtirpc-git.patch:1.2 --- SOURCES/libtirpc-git.patch:1.1 Wed Mar 4 23:00:56 2009 +++ SOURCES/libtirpc-git.patch Sun Mar 22 01:26:46 2009 @@ -1,122 +1,109 @@ -commit 951a1b9b0195cbe58e1e62142e84d7ec4658943f -Author: Steve Dickson <[email protected]> -Date: Wed Jan 28 12:44:46 2009 -0500 +commit fbe8b50728c565459f2678aa1ad4dfc6610d1f9e +Author: Jeff Layton <[email protected]> +Date: Fri Mar 13 12:48:40 2009 -0400 - Converted all uid and gid variables of the type uid_t and gid_t. + libtirpc: must free saved wire verifier when destroying context - Signed-off-by: Steve Dickson <[email protected]> - -commit 5bc80ccd81e0c7ef185de34e7f34a7766bce0e27 -Author: Steve Dickson <[email protected]> -Date: Wed Jan 28 09:56:10 2009 -0500 - - Removed a number warnings by adding a number of type casts. + When we're destroying the authgss context, we must also free any + saved wire verifier that we have to keep from leaking memory. + Signed-off-by: Jeff Layton <[email protected]> Signed-off-by: Steve Dickson <[email protected]> -commit 2bb4c8d7ec8a98e1be9133d5901149a81ea9b5d9 -Author: Chuck Lever <[email protected]> -Date: Wed Jan 28 09:19:07 2009 -0500 +diff --git a/src/auth_gss.c b/src/auth_gss.c +index bf6cba6..df3017a 100644 +--- a/src/auth_gss.c ++++ b/src/auth_gss.c +@@ -567,6 +567,12 @@ authgss_destroy_context(AUTH *auth) + gss_delete_sec_context(&min_stat, &gd->ctx, NULL); + gd->ctx = GSS_C_NO_CONTEXT; + } ++ ++ /* free saved wire verifier (if any) */ ++ mem_free(gd->gc_wire_verf.value, gd->gc_wire_verf.length); ++ gd->gc_wire_verf.value = NULL; ++ gd->gc_wire_verf.length = 0; ++ + gd->established = FALSE; + } + - backwards compatibility: fix order of fields in TI-RPC's svc_req - - Preserve ABI compatibility between glibc's RPC implementation and - the legacy RPC implementation in libtirpc by moving the rq_xprt - field in the TI-RPC version of the svc_req struct so it is - backwards compatible with the legacy version of this structure. - - Linux's legacy svc_req struct, from /usr/include/rpc/svc.h, looks - like this: - - struct svc_req { - rpcprog_t rq_prog; /* service program number */ - rpcvers_t rq_vers; /* service protocol version */ - rpcproc_t rq_proc; /* the desired procedure */ - struct opaque_auth rq_cred; /* raw creds from the wire */ - caddr_t rq_clntcred; /* read only cooked cred */ - SVCXPRT *rq_xprt; /* associated transport */ - }; - - The new TI-RPC svc_req struct, from /usr/include/tirpc/rpc/svc.h, - looks like this: - - struct svc_req { - u_int32_t rq_prog; /* service program number */ - u_int32_t rq_vers; /* service protocol version */ - u_int32_t rq_proc; /* the desired procedure */ - struct opaque_auth rq_cred; /* raw creds from the wire */ - void *rq_clntcred; /* read only cooked cred */ - caddr_t rq_clntname; /* read only client name */ - caddr_t rq_svcname; /* read only cooked service cred */ - SVCXPRT *rq_xprt; /* associated transport */ - }; - - Note the extra fields rq_clntname and rq_svcname. These are used for - TI-RPC's RPCSEC GSS flavor support. - - This issue came to light because rpc.statd still uses only legacy RPC - calls, and thus includes /usr/include/rpc/svc.h. However, other parts - of nfs-utils now link with TI-RPC, so the legacy RPC functions in - libtirpc are used in favor of glibc's RPC functions. The libtirpc svc - functions use the new svc_req struct, but rpc.statd uses the old - svc_req struct. - - Since the svc_req fields were different, rpc.statd broke after recent - IPv6-related changes, even though I hadn't made any changes to it. - Note that rpc.mountd also references the rq_xprt field, so it has the - same issue. - - In most operating systems, there is only one rpc/svc.h and one version - of svc_req so this is not a problem. We should audit all of the - structures and functions under /usr/include/rpc and - /usr/include/tirpc/rpc to ensure we have a reasonable level of - backwards compatibility until such a time it is decided to merge these - implementations or get rid of RPC support in glibc. +commit 956a049085101961593956d01084f7f713ea8ded +Author: Jeff Layton <[email protected]> +Date: Fri Mar 13 12:47:36 2009 -0400 + + libtirpc: be sure to free cl_netid and cl_tp + + When creating a client with clnt_tli_create, it uses strdup to copy + strings for these fields if nconf is passed in. clnt_dg_destroy frees + these strings already. Make sure clnt_vc_destroy frees them in the same + way. - Signed-off-by: Chuck Lever <[email protected]> + Signed-off-by: Jeff Layton <[email protected]> Signed-off-by: Steve Dickson <[email protected]> -commit 12129663ddc356aed44434aeda28ff1ce2dfc786 -Author: Sandeep Josh <[email protected]> -Date: Thu Jan 22 12:34:19 2009 -0500 - - tirpc header file fixes for C++ - - Added a __THROW to a couple extern declarations. +diff --git a/src/clnt_vc.c b/src/clnt_vc.c +index 1dcc976..eb9bb7f 100644 +--- a/src/clnt_vc.c ++++ b/src/clnt_vc.c +@@ -646,6 +646,10 @@ clnt_vc_destroy(cl) + if (ct->ct_addr.buf) + free(ct->ct_addr.buf); + mem_free(ct, sizeof(struct ct_data)); ++ if (cl->cl_netid && cl->cl_netid[0]) ++ mem_free(cl->cl_netid, strlen(cl->cl_netid) +1); ++ if (cl->cl_tp && cl->cl_tp[0]) ++ mem_free(cl->cl_tp, strlen(cl->cl_tp) +1); + mem_free(cl, sizeof(CLIENT)); + mutex_unlock(&clnt_fd_lock); + thr_sigsetmask(SIG_SETMASK, &(mask), NULL); + +commit 1c8c2bf2f0b81b0fa1992894679786619c048a1e +Author: Jeff Layton <[email protected]> +Date: Fri Mar 13 12:44:16 2009 -0400 + + libtirpc: set r_netid and r_owner in __rpcb_findaddr_timed + + These fields in the rpcbind GETADDR call are being passed uninitialized + to CLNT_CALL. In the case of x86_64 at least, this usually leads to a + segfault. On x86, it sometimes causes segfaults and other times causes + garbage to be sent on the wire. + + rpcbind generally ignores the r_owner field for calls that come in over + the wire, so it really doesn't matter what we send in that slot. We just + need to send something. The reference implementation from Sun seems to + send a blank string. Have ours follow suit. + Signed-off-by: Jeff Layton <[email protected]> Signed-off-by: Steve Dickson <[email protected]> -commit e145633cf10c92aa6f24b8a1a322435b4e874b02 -Author: Steve Dickson <[email protected]> -Date: Thu Nov 20 08:55:31 2008 -0500 - - Changed clnt_spcreateerror() to return clearer - and more concise error messages. - - Signed-off-by: Steve Dickson <[email protected]> +diff --git a/src/rpcb_clnt.c b/src/rpcb_clnt.c +index ed16f00..b1c0038 100644 +--- a/src/rpcb_clnt.c ++++ b/src/rpcb_clnt.c +@@ -749,6 +749,13 @@ __rpcb_findaddr_timed(program, version, nconf, host, clpp, tp) + parms.r_addr = NULL; + parms.r_prog = program; + parms.r_vers = version; ++ parms.r_netid = nconf->nc_netid; ++ ++ /* ++ * According to wire captures, the reference implementation ++ * (OpenSolaris) sends a blank string here too. ++ */ ++ parms.r_owner = ""; + + /* + * Use default total timeout if no timeout is specified. -commit 7c78a0362fcd3e0749330f11d0fdecb62131a6a3 +commit 951a1b9b0195cbe58e1e62142e84d7ec4658943f Author: Steve Dickson <[email protected]> -Date: Thu Nov 20 08:53:52 2008 -0500 +Date: Wed Jan 28 12:44:46 2009 -0500 - The clnt_fd_lock mutex lock was not being - released during an error path in clnt_dg_call. + Converted all uid and gid variables of the type uid_t and gid_t. Signed-off-by: Steve Dickson <[email protected]> -diff --git a/src/auth_gss.c b/src/auth_gss.c -index 8f7919c..bf6cba6 100644 ---- a/src/auth_gss.c -+++ b/src/auth_gss.c -@@ -221,7 +221,7 @@ authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec) - sname.length = strlen(service); - - maj_stat = gss_import_name(&min_stat, &sname, -- GSS_C_NT_HOSTBASED_SERVICE, -+ (gss_OID)GSS_C_NT_HOSTBASED_SERVICE, - &name); - - if (maj_stat != GSS_S_COMPLETE) { diff --git a/src/auth_unix.c b/src/auth_unix.c index c2727e0..04ee5dd 100644 --- a/src/auth_unix.c @@ -145,24 +132,6 @@ } /* -diff --git a/src/authgss_prot.c b/src/authgss_prot.c -index 97724f1..be0d1a6 100644 ---- a/src/authgss_prot.c -+++ b/src/authgss_prot.c -@@ -176,10 +176,11 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, - XDR tmpxdrs; - gss_buffer_desc databuf, wrapbuf; - OM_uint32 maj_stat, min_stat; -- u_int seq_num, conf_state, qop_state; -+ u_int seq_num, qop_state; -+ int conf_state; - bool_t xdr_stat; - -- if (xdr_func == xdr_void || xdr_ptr == NULL) -+ if (xdr_func == (xdrproc_t)xdr_void || xdr_ptr == NULL) - return (TRUE); - - memset(&databuf, 0, sizeof(databuf)); diff --git a/src/authunix_prot.c b/src/authunix_prot.c index 01c1711..79f2fb6 100644 --- a/src/authunix_prot.c @@ -178,87 +147,6 @@ && xdr_array(xdrs, (caddr_t *)&(p->aup_gids), &(p->aup_len), NGRPS, sizeof(int), (xdrproc_t)xdr_int) ) { return (TRUE); -diff --git a/src/clnt_dg.c b/src/clnt_dg.c -index da01c5b..9a574eb 100644 ---- a/src/clnt_dg.c -+++ b/src/clnt_dg.c -@@ -402,6 +402,7 @@ get_reply: - - fd.fd = cu->cu_fd; - fd.events = POLLIN; -+ fd.revents = 0; - while (total_time > 0) { - tv = total_time < nextsend_time ? total_time : nextsend_time; - switch (poll(&fd, 1, tv)) { -@@ -455,6 +456,7 @@ get_reply: - { - e = (struct sock_extended_err *) CMSG_DATA(cmsg); - cu->cu_error.re_errno = e->ee_errno; -+ release_fd_lock(cu->cu_fd, mask); - return (cu->cu_error.re_status = RPC_CANTRECV); - } - } -diff --git a/src/clnt_perror.c b/src/clnt_perror.c -index 8f53f8e..1c1c705 100644 ---- a/src/clnt_perror.c -+++ b/src/clnt_perror.c -@@ -239,7 +239,7 @@ char * - clnt_spcreateerror(s) - const char *s; - { -- char *str; -+ char *str, *err; - size_t len, i; - - if (s == NULL) -@@ -257,8 +257,21 @@ clnt_spcreateerror(s) - switch (rpc_createerr.cf_stat) { - case RPC_PMAPFAILURE: - (void) strncat(str, " - ", len - 1); -- (void) strncat(str, -- clnt_sperrno(rpc_createerr.cf_error.re_status), len - 4); -+ err = clnt_sperrno(rpc_createerr.cf_error.re_status); -+ if (err) -+ (void) strncat(str, err+5, len-5); -+ switch(rpc_createerr.cf_error.re_status) { -+ case RPC_CANTSEND: -+ case RPC_CANTRECV: -+ i = strlen(str); -+ len -= i; -+ snprintf(str+i, len, ": errno %d (%s)", -+ rpc_createerr.cf_error.re_errno, -+ strerror(rpc_createerr.cf_error.re_errno)); -+ break; -+ default: -+ break; -+ } - break; - - case RPC_SYSTEMERROR: -diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c -index 346e5b1..9e9ff81 100644 ---- a/src/svc_auth_gss.c -+++ b/src/svc_auth_gss.c -@@ -190,7 +190,7 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst, - /* Deserialize arguments. */ - memset(&recv_tok, 0, sizeof(recv_tok)); - -- if (!svc_getargs(rqst->rq_xprt, xdr_rpc_gss_init_args, -+ if (!svc_getargs(rqst->rq_xprt, (xdrproc_t)xdr_rpc_gss_init_args, - (caddr_t)&recv_tok)) - return (FALSE); - -@@ -469,8 +469,8 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) - - *no_dispatch = TRUE; - -- call_stat = svc_sendreply(rqst->rq_xprt, xdr_rpc_gss_init_res, -- (caddr_t)&gr); -+ call_stat = svc_sendreply(rqst->rq_xprt, -+ (xdrproc_t)xdr_rpc_gss_init_res, (caddr_t)&gr); - - if (!call_stat) - return (AUTH_FAILED); diff --git a/src/svc_auth_unix.c b/src/svc_auth_unix.c index 77a1272..7a7eeaa 100644 --- a/src/svc_auth_unix.c @@ -304,6 +192,167 @@ }; #define authsys_parms authunix_parms + +commit 5bc80ccd81e0c7ef185de34e7f34a7766bce0e27 +Author: Steve Dickson <[email protected]> +Date: Wed Jan 28 09:56:10 2009 -0500 + + Removed a number warnings by adding a number of type casts. + + Signed-off-by: Steve Dickson <[email protected]> + +diff --git a/src/auth_gss.c b/src/auth_gss.c +index 8f7919c..bf6cba6 100644 +--- a/src/auth_gss.c ++++ b/src/auth_gss.c +@@ -221,7 +221,7 @@ authgss_create_default(CLIENT *clnt, char *service, struct rpc_gss_sec *sec) + sname.length = strlen(service); + + maj_stat = gss_import_name(&min_stat, &sname, +- GSS_C_NT_HOSTBASED_SERVICE, ++ (gss_OID)GSS_C_NT_HOSTBASED_SERVICE, + &name); + + if (maj_stat != GSS_S_COMPLETE) { +diff --git a/src/authgss_prot.c b/src/authgss_prot.c +index 97724f1..be0d1a6 100644 +--- a/src/authgss_prot.c ++++ b/src/authgss_prot.c +@@ -176,10 +176,11 @@ xdr_rpc_gss_unwrap_data(XDR *xdrs, xdrproc_t xdr_func, caddr_t xdr_ptr, + XDR tmpxdrs; + gss_buffer_desc databuf, wrapbuf; + OM_uint32 maj_stat, min_stat; +- u_int seq_num, conf_state, qop_state; ++ u_int seq_num, qop_state; ++ int conf_state; + bool_t xdr_stat; + +- if (xdr_func == xdr_void || xdr_ptr == NULL) ++ if (xdr_func == (xdrproc_t)xdr_void || xdr_ptr == NULL) + return (TRUE); + + memset(&databuf, 0, sizeof(databuf)); +diff --git a/src/svc_auth_gss.c b/src/svc_auth_gss.c +index 346e5b1..9e9ff81 100644 +--- a/src/svc_auth_gss.c ++++ b/src/svc_auth_gss.c +@@ -190,7 +190,7 @@ svcauth_gss_accept_sec_context(struct svc_req *rqst, + /* Deserialize arguments. */ + memset(&recv_tok, 0, sizeof(recv_tok)); + +- if (!svc_getargs(rqst->rq_xprt, xdr_rpc_gss_init_args, ++ if (!svc_getargs(rqst->rq_xprt, (xdrproc_t)xdr_rpc_gss_init_args, + (caddr_t)&recv_tok)) + return (FALSE); + +@@ -469,8 +469,8 @@ _svcauth_gss(struct svc_req *rqst, struct rpc_msg *msg, bool_t *no_dispatch) + + *no_dispatch = TRUE; + +- call_stat = svc_sendreply(rqst->rq_xprt, xdr_rpc_gss_init_res, +- (caddr_t)&gr); ++ call_stat = svc_sendreply(rqst->rq_xprt, ++ (xdrproc_t)xdr_rpc_gss_init_res, (caddr_t)&gr); + + if (!call_stat) + return (AUTH_FAILED); + +commit 2bb4c8d7ec8a98e1be9133d5901149a81ea9b5d9 +Author: Chuck Lever <[email protected]> +Date: Wed Jan 28 09:19:07 2009 -0500 + + backwards compatibility: fix order of fields in TI-RPC's svc_req + + Preserve ABI compatibility between glibc's RPC implementation and + the legacy RPC implementation in libtirpc by moving the rq_xprt + field in the TI-RPC version of the svc_req struct so it is + backwards compatible with the legacy version of this structure. + + Linux's legacy svc_req struct, from /usr/include/rpc/svc.h, looks + like this: + + struct svc_req { + rpcprog_t rq_prog; /* service program number */ + rpcvers_t rq_vers; /* service protocol version */ + rpcproc_t rq_proc; /* the desired procedure */ + struct opaque_auth rq_cred; /* raw creds from the wire */ + caddr_t rq_clntcred; /* read only cooked cred */ + SVCXPRT *rq_xprt; /* associated transport */ + }; + + The new TI-RPC svc_req struct, from /usr/include/tirpc/rpc/svc.h, + looks like this: + + struct svc_req { + u_int32_t rq_prog; /* service program number */ + u_int32_t rq_vers; /* service protocol version */ + u_int32_t rq_proc; /* the desired procedure */ + struct opaque_auth rq_cred; /* raw creds from the wire */ + void *rq_clntcred; /* read only cooked cred */ + caddr_t rq_clntname; /* read only client name */ + caddr_t rq_svcname; /* read only cooked service cred */ + SVCXPRT *rq_xprt; /* associated transport */ + }; + + Note the extra fields rq_clntname and rq_svcname. These are used for + TI-RPC's RPCSEC GSS flavor support. + + This issue came to light because rpc.statd still uses only legacy RPC + calls, and thus includes /usr/include/rpc/svc.h. However, other parts + of nfs-utils now link with TI-RPC, so the legacy RPC functions in + libtirpc are used in favor of glibc's RPC functions. The libtirpc svc + functions use the new svc_req struct, but rpc.statd uses the old + svc_req struct. + + Since the svc_req fields were different, rpc.statd broke after recent + IPv6-related changes, even though I hadn't made any changes to it. + Note that rpc.mountd also references the rq_xprt field, so it has the + same issue. + + In most operating systems, there is only one rpc/svc.h and one version + of svc_req so this is not a problem. We should audit all of the + structures and functions under /usr/include/rpc and + /usr/include/tirpc/rpc to ensure we have a reasonable level of + backwards compatibility until such a time it is decided to merge these + implementations or get rid of RPC support in glibc. + + Signed-off-by: Chuck Lever <[email protected]> + Signed-off-by: Steve Dickson <[email protected]> + +diff --git a/tirpc/rpc/svc.h b/tirpc/rpc/svc.h +index ec5914f..ea2985d 100644 +--- a/tirpc/rpc/svc.h ++++ b/tirpc/rpc/svc.h +@@ -131,14 +131,17 @@ typedef struct __rpc_svcxprt { + * Service request + */ + struct svc_req { ++ /* ORDER: compatibility with legacy RPC */ + u_int32_t rq_prog; /* service program number */ + u_int32_t rq_vers; /* service protocol version */ + u_int32_t rq_proc; /* the desired procedure */ + struct opaque_auth rq_cred; /* raw creds from the wire */ + void *rq_clntcred; /* read only cooked cred */ ++ SVCXPRT *rq_xprt; /* associated transport */ ++ ++ /* New with TI-RPC */ + caddr_t rq_clntname; /* read only client name */ + caddr_t rq_svcname; /* read only cooked service cred */ +- SVCXPRT *rq_xprt; /* associated transport */ + }; + + /* + +commit 12129663ddc356aed44434aeda28ff1ce2dfc786 +Author: Sandeep Josh <[email protected]> +Date: Thu Jan 22 12:34:19 2009 -0500 + + tirpc header file fixes for C++ + + Added a __THROW to a couple extern declarations. + + Signed-off-by: Steve Dickson <[email protected]> + diff --git a/tirpc/rpc/rpc.h b/tirpc/rpc/rpc.h index 23e3197..f93479e 100644 --- a/tirpc/rpc/rpc.h @@ -332,26 +381,80 @@ __END_DECLS #endif /* !_RPC_CENT_H */ -diff --git a/tirpc/rpc/svc.h b/tirpc/rpc/svc.h -index ec5914f..ea2985d 100644 ---- a/tirpc/rpc/svc.h -+++ b/tirpc/rpc/svc.h -@@ -131,14 +131,17 @@ typedef struct __rpc_svcxprt { - * Service request - */ - struct svc_req { -+ /* ORDER: compatibility with legacy RPC */ - u_int32_t rq_prog; /* service program number */ - u_int32_t rq_vers; /* service protocol version */ - u_int32_t rq_proc; /* the desired procedure */ - struct opaque_auth rq_cred; /* raw creds from the wire */ - void *rq_clntcred; /* read only cooked cred */ -+ SVCXPRT *rq_xprt; /* associated transport */ -+ -+ /* New with TI-RPC */ - caddr_t rq_clntname; /* read only client name */ - caddr_t rq_svcname; /* read only cooked service cred */ -- SVCXPRT *rq_xprt; /* associated transport */ - }; + +commit e145633cf10c92aa6f24b8a1a322435b4e874b02 +Author: Steve Dickson <[email protected]> +Date: Thu Nov 20 08:55:31 2008 -0500 + + Changed clnt_spcreateerror() to return clearer + and more concise error messages. + + Signed-off-by: Steve Dickson <[email protected]> + +diff --git a/src/clnt_perror.c b/src/clnt_perror.c +index 8f53f8e..1c1c705 100644 +--- a/src/clnt_perror.c ++++ b/src/clnt_perror.c +@@ -239,7 +239,7 @@ char * + clnt_spcreateerror(s) + const char *s; + { +- char *str; ++ char *str, *err; + size_t len, i; - /* + if (s == NULL) +@@ -257,8 +257,21 @@ clnt_spcreateerror(s) + switch (rpc_createerr.cf_stat) { + case RPC_PMAPFAILURE: + (void) strncat(str, " - ", len - 1); +- (void) strncat(str, +- clnt_sperrno(rpc_createerr.cf_error.re_status), len - 4); ++ err = clnt_sperrno(rpc_createerr.cf_error.re_status); ++ if (err) ++ (void) strncat(str, err+5, len-5); ++ switch(rpc_createerr.cf_error.re_status) { ++ case RPC_CANTSEND: ++ case RPC_CANTRECV: ++ i = strlen(str); ++ len -= i; ++ snprintf(str+i, len, ": errno %d (%s)", ++ rpc_createerr.cf_error.re_errno, ++ strerror(rpc_createerr.cf_error.re_errno)); ++ break; ++ default: ++ break; ++ } + break; + + case RPC_SYSTEMERROR: + +commit 7c78a0362fcd3e0749330f11d0fdecb62131a6a3 +Author: Steve Dickson <[email protected]> +Date: Thu Nov 20 08:53:52 2008 -0500 + + The clnt_fd_lock mutex lock was not being + released during an error path in clnt_dg_call. + + Signed-off-by: Steve Dickson <[email protected]> + +diff --git a/src/clnt_dg.c b/src/clnt_dg.c +index da01c5b..9a574eb 100644 +--- a/src/clnt_dg.c ++++ b/src/clnt_dg.c +@@ -402,6 +402,7 @@ get_reply: + + fd.fd = cu->cu_fd; + fd.events = POLLIN; ++ fd.revents = 0; + while (total_time > 0) { + tv = total_time < nextsend_time ? total_time : nextsend_time; + switch (poll(&fd, 1, tv)) { +@@ -455,6 +456,7 @@ get_reply: + { + e = (struct sock_extended_err *) CMSG_DATA(cmsg); + cu->cu_error.re_errno = e->ee_errno; ++ release_fd_lock(cu->cu_fd, mask); <<Diff was trimmed, longer than 597 lines>> ---- CVS-web: http://cvs.pld-linux.org/cgi-bin/cvsweb.cgi/SOURCES/libtirpc-git.patch?r1=1.1&r2=1.2&f=u _______________________________________________ pld-cvs-commit mailing list [email protected] http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit
