qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC 1/5] nbd: Correct name comparison for export_set_n


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [RFC 1/5] nbd: Correct name comparison for export_set_name()
Date: Wed, 4 Jun 2014 13:52:46 +0200
User-agent: Mutt/1.5.23 (2014-03-12)

On Sat, May 31, 2014 at 08:43:08PM +0200, Max Reitz wrote:
> exp->name == name is certainly true if both strings are equal and will
> work for both of them being NULL (which is important to check here);
> however, the strings may also be equal without having the same address,
> in which case there is no need to replace the export's name either.
> Therefore, add a check for this case.
> 
> Signed-off-by: Max Reitz <address@hidden>
> ---
>  nbd.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/nbd.c b/nbd.c
> index e5084b6..0787cba 100644
> --- a/nbd.c
> +++ b/nbd.c
> @@ -832,7 +832,7 @@ NBDExport *nbd_export_find(const char *name)
>  
>  void nbd_export_set_name(NBDExport *exp, const char *name)
>  {
> -    if (exp->name == name) {
> +    if (exp->name == name || (exp->name && name && !strcmp(exp->name, 
> name))) {
>          return;
>      }

It's not clear to me why we even bother.  The function is idempotent and
there are only 2 call sites in QEMU.  This is not a performance-critical
function where it helps to bail early.

Can we just drop the if statement completely?

void nbd_export_set_name(NBDExport *exp, const char *name)
{
    if (exp->name == name) {
        return;
    }

    nbd_export_get(exp);
    if (exp->name != NULL) {
        g_free(exp->name);
        exp->name = NULL;
        QTAILQ_REMOVE(&exports, exp, next);
        nbd_export_put(exp);
    }
    if (name != NULL) {
        nbd_export_get(exp);
        exp->name = g_strdup(name);
        QTAILQ_INSERT_TAIL(&exports, exp, next);
    }
    nbd_export_put(exp);
}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]