[PATCH 03/15] util: cgroup: Use GHashTable instead of virHashTable

Pavel Hrdina phrdina at redhat.com
Thu Oct 22 13:38:58 UTC 2020


On Thu, Oct 22, 2020 at 02:17:01PM +0100, Daniel P. Berrangé wrote:
> On Thu, Oct 22, 2020 at 03:11:59PM +0200, Pavel Hrdina wrote:
> > On Thu, Oct 22, 2020 at 11:34:54AM +0200, Peter Krempa wrote:
> > > Rewrite using GHashTable which already has interfaces for using a number
> > > as hash key. Glib's implementation doesn't copy the key by default, so
> > > we need to allocate it, but overal the interface is more suited for this
> > > case.
> > > 
> > > Signed-off-by: Peter Krempa <pkrempa at redhat.com>
> > > ---
> > >  src/util/vircgroup.c        | 61 ++++++++-----------------------------
> > >  src/util/vircgroupbackend.h |  3 +-
> > >  src/util/vircgrouppriv.h    |  2 +-
> > >  src/util/vircgroupv1.c      |  2 +-
> > >  src/util/vircgroupv2.c      |  2 +-
> > >  5 files changed, 17 insertions(+), 53 deletions(-)
> > > 
> > > diff --git a/src/util/vircgroup.c b/src/util/vircgroup.c
> > > index 5f4cb01bc0..b74ec1a8fa 100644
> > > --- a/src/util/vircgroup.c
> > > +++ b/src/util/vircgroup.c
> > > @@ -42,7 +42,6 @@
> > >  #include "virlog.h"
> > >  #include "virfile.h"
> > >  #include "virhash.h"
> > > -#include "virhashcode.h"
> > >  #include "virstring.h"
> > >  #include "virsystemd.h"
> > >  #include "virtypedparam.h"
> > > @@ -2382,7 +2381,7 @@ virCgroupRemove(virCgroupPtr group)
> > >  static int
> > >  virCgroupKillInternal(virCgroupPtr group,
> > >                        int signum,
> > > -                      virHashTablePtr pids,
> > > +                      GHashTable *pids,
> > >                        int controller,
> > >                        const char *taskFile)
> > >  {
> > > @@ -2415,8 +2414,9 @@ virCgroupKillInternal(virCgroupPtr group,
> > >              goto cleanup;
> > >          } else {
> > >              while (!feof(fp)) {
> > > -                long pid_value;
> > > -                if (fscanf(fp, "%ld", &pid_value) != 1) {
> > > +                g_autofree long long *pid_value = g_new0(long long, 1);
> > 
> > I would rather use gint64 here as the exact type of gint64 changes with
> > the hardware. For example on my AMD x86_84 it is 'signed long'.
> 
> If you use  gint64, then you need to start using PRIu64 macro
> to deal with the fact that the data type changes for printf
> formatting.
> 
> Using long long is simpler as you can unconditionally use  %ll
> which is a good thing IMHO.
> 
> 
> > We should do this every time we pass pointers to GLib APIs because for
> > example bool and gboolean are different and when I used bool type in
> > GLib dbus APIs it randomly crashed.
> 
> bool vs gboolean is a special case because of the different types.
> 
> For all the other g* basic types, we should not use them. GLib has
> a ticket open considering deprecating them, because they re-invent
> stdint.h

Good to know. I personally don't like these types as it complicates
thinks especially with the gboolean which is not that obvious.

I checked the GLib code and it handles it reasonably so using long long
should not be an issue.

Reviewed-by: Pavel Hrdina <phrdina at redhat.com>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20201022/0fa34447/attachment-0001.sig>


More information about the libvir-list mailing list