[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);
}
- Re: [Qemu-devel] [RFC 1/5] nbd: Correct name comparison for export_set_name(),
Stefan Hajnoczi <=