[Spice-devel] [PATCH spice-server v2 1/3] Separate code to manage statistic file

Frediano Ziglio fziglio at redhat.com
Wed Nov 16 14:43:43 UTC 2016


> 
> On Wed, Nov 16, 2016 at 11:35:05AM +0000, Frediano Ziglio wrote:
> > Code is quite independent so move in separate file.
> > 
> > diff --git a/server/reds.c b/server/reds.c
> > index 1a58c9d..731a356 100644
> > --- a/server/reds.c
> > +++ b/server/reds.c
> > @@ -76,6 +76,8 @@
> >  #include "main-channel-client.h"
> >  #include "red-client.h"
> >  
> > +#define REDS_MAX_STAT_NODES 100
> > +
> 
> Not overly convinced this needs to be configurable from the stat user.
> But this can be adjusted later if we decide we don't want that.
> 

Just moved the constant.
Maybe the file could be also extended dynamically.

> >  static void reds_client_monitors_config(RedsState *reds,
> >  VDAgentMonitorsConfig *monitors_config);
> >  static gboolean reds_use_client_monitors_config(RedsState *reds);
> >  
> >      if (reds_init_net(reds) < 0) {
> 
> > diff --git a/server/stat-file.c b/server/stat-file.c
> > new file mode 100644
> > index 0000000..7a07edb
> > --- /dev/null
> > +++ b/server/stat-file.c
> > @@ -0,0 +1,176 @@
> > +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> > +/*
> > +   Copyright (C) 2009-2016 Red Hat, Inc.
> > +
> > +   This library is free software; you can redistribute it and/or
> > +   modify it under the terms of the GNU Lesser General Public
> > +   License as published by the Free Software Foundation; either
> > +   version 2.1 of the License, or (at your option) any later version.
> > +
> > +   This library is distributed in the hope that it will be useful,
> > +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +   Lesser General Public License for more details.
> > +
> > +   You should have received a copy of the GNU Lesser General Public
> > +   License along with this library; if not, see
> > <http://www.gnu.org/licenses/>.
> > +*/
> > +#ifdef HAVE_CONFIG_H
> > +#include <config.h>
> > +#endif
> > +
> > +#include <stdio.h>
> > +#include <stdlib.h>
> > +#include <string.h>
> > +#include <unistd.h>
> > +#include <errno.h>
> > +#include <fcntl.h>
> > +#include <sys/mman.h>
> > +#include <common/log.h>
> > +#include <common/mem.h>
> > +
> > +#include "stat-file.h"
> > +
> > +#define STAT_SHM_SIZE(max_nodes) (sizeof(SpiceStat) + max_nodes *
> > sizeof(SpiceStatNode))
> 
> (max_nodes)
> 
> > +
> > +void stat_file_init(RedStatFile *stat_file, unsigned int max_nodes)
> > +{
> > +    int shm_name_len;
> > +    int fd;
> > +    size_t shm_size = STAT_SHM_SIZE(max_nodes);
> > +
> > +    stat_file->max_nodes = max_nodes;
> > +    shm_name_len = strlen(SPICE_STAT_SHM_NAME) + 20;
> > +    stat_file->shm_name = (char *)spice_malloc(shm_name_len);
> > +    snprintf(stat_file->shm_name, shm_name_len, SPICE_STAT_SHM_NAME,
> > getpid());
> 
> Here g_strdup_printf() could be used (agreed that this does not belong
> in this patch).
> 

I'll write a follow up.

> > diff --git a/server/stat-file.h b/server/stat-file.h
> > new file mode 100644
> > index 0000000..8ac8efc
> > --- /dev/null
> > +++ b/server/stat-file.h
> > @@ -0,0 +1,43 @@
> > +/* -*- Mode: C; c-basic-offset: 4; indent-tabs-mode: nil -*- */
> > +/*
> > +   Copyright (C) 2016 Red Hat, Inc.
> > +
> > +   This library is free software; you can redistribute it and/or
> > +   modify it under the terms of the GNU Lesser General Public
> > +   License as published by the Free Software Foundation; either
> > +   version 2.1 of the License, or (at your option) any later version.
> > +
> > +   This library is distributed in the hope that it will be useful,
> > +   but WITHOUT ANY WARRANTY; without even the implied warranty of
> > +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
> > +   Lesser General Public License for more details.
> > +
> > +   You should have received a copy of the GNU Lesser General Public
> > +   License along with this library; if not, see
> > <http://www.gnu.org/licenses/>.
> > +*/
> > +#ifndef STAT_FILE_H_
> > +#define STAT_FILE_H_
> > +
> > +#include <pthread.h>
> > +#include <spice/stats.h>
> > +
> > +typedef uint32_t StatNodeRef;
> > +#define INVALID_STAT_REF (~(StatNodeRef)0)
> > +
> > +typedef struct {
> > +    char *shm_name;
> > +    SpiceStat *stat;
> > +    pthread_mutex_t lock;
> > +    unsigned int max_nodes;
> > +} RedStatFile;
> 
> Any reason why this is not private? I think the struct content is not
> used outside of stat-file.c
> 
> Christophe
> 

It used by the test.
Also requires less change to reds-private.h.

Frediano


More information about the Spice-devel mailing list