Minor nitpick: On 25/10/13 10:30, Justus Winter wrote: > Found using the Clang Static Analyzer. > > * libtrivfs/protid-clean.c (trivfs_clean_protid): Fix use-after-free error. > --- > libtrivfs/protid-clean.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/libtrivfs/protid-clean.c b/libtrivfs/protid-clean.c > index 856d7af..575dec3 100644 > --- a/libtrivfs/protid-clean.c > +++ b/libtrivfs/protid-clean.c > @@ -39,10 +39,13 @@ trivfs_clean_protid (void *arg) > } > if (--cred->po->refcnt == 0) > { > + struct trivfs_control *cntl = cred->po->cntl; > ports_port_deref (cred->po->cntl); > free (cred->po); > + pthread_mutex_unlock (&cntl->lock); > } > - pthread_mutex_unlock (&cred->po->cntl->lock); > + else > + pthread_mutex_unlock (&cred->po->cntl->lock);
I think it'd be clearer to unconditionally declare cntl before the if block and call pthread_mutex_unlock on &cntl->lock after the if block instead of inside the if and again inside the else. Cheers, Emilio