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: Max Reitz
Subject: Re: [Qemu-devel] [RFC 1/5] nbd: Correct name comparison for export_set_name()
Date: Thu, 05 Jun 2014 19:28:09 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.5.0

On 04.06.2014 13:52, Stefan Hajnoczi wrote:
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.

You're probably right. I just happened to stumble over this code when looking into NBD.

Can we just drop the if statement completely?

Probably, yes, but then again, I think it's not worth bothering with dropping it, either. ;-)

Max

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]