diff options
Diffstat (limited to 'rpc')
| -rw-r--r-- | rpc/rpc-lib/src/rpcsvc.c | 26 | 
1 files changed, 15 insertions, 11 deletions
diff --git a/rpc/rpc-lib/src/rpcsvc.c b/rpc/rpc-lib/src/rpcsvc.c index 623523c09d2..81d40c8ec0e 100644 --- a/rpc/rpc-lib/src/rpcsvc.c +++ b/rpc/rpc-lib/src/rpcsvc.c @@ -1855,6 +1855,18 @@ rpcsvc_program_unregister(rpcsvc_t *svc, rpcsvc_program_t *program)          goto out;      } +    pthread_rwlock_rdlock(&svc->rpclock); +    { +        list_for_each_entry(prog, &svc->programs, program) +        { +            if ((prog->prognum == program->prognum) && +                (prog->progver == program->progver)) { +                break; +            } +        } +    } +    pthread_rwlock_unlock(&svc->rpclock); +      ret = rpcsvc_program_unregister_portmap(program);      if (ret == -1) {          gf_log(GF_RPCSVC, GF_LOG_ERROR, @@ -1871,17 +1883,6 @@ rpcsvc_program_unregister(rpcsvc_t *svc, rpcsvc_program_t *program)          goto out;      }  #endif -    pthread_rwlock_rdlock(&svc->rpclock); -    { -        list_for_each_entry(prog, &svc->programs, program) -        { -            if ((prog->prognum == program->prognum) && -                (prog->progver == program->progver)) { -                break; -            } -        } -    } -    pthread_rwlock_unlock(&svc->rpclock);      gf_log(GF_RPCSVC, GF_LOG_DEBUG,             "Program unregistered: %s, Num: %d," @@ -1902,6 +1903,9 @@ rpcsvc_program_unregister(rpcsvc_t *svc, rpcsvc_program_t *program)      ret = 0;  out: +    if (prog) +        GF_FREE(prog); +      if (ret == -1) {          if (program) {              gf_log(GF_RPCSVC, GF_LOG_ERROR,  | 
