On Tue, Dec 09, 2025 at 02:03:27PM +0100, Philippe Mathieu-Daudé wrote: > On 9/12/25 13:50, Stefan Weil via wrote: > > This fixes a compiler error when higher warning levels are enabled: > > > > ../migration/postcopy-ram.c: In function ‘postcopy_temp_pages_setup’: > > ../migration/postcopy-ram.c:1483:50: error: ‘g_malloc0_n’ sizes specified > > with ‘sizeof’ in the earlier argument and not in the later argument > > [-Werror=calloc-transposed-args] > > 1483 | mis->postcopy_tmp_pages = g_malloc0_n(sizeof(PostcopyTmpPage), > > channels); > > | ^~~~~~~~~~~~~~~ > > ../migration/postcopy-ram.c:1483:50: note: earlier argument should specify > > number of elements, later size of each element > > > > Avoid also a related int/unsigned mismatch by fixing the type of > > two local variables. > > > > Signed-off-by: Stefan Weil <[email protected]> > > --- > > migration/postcopy-ram.c | 5 +++-- > > 1 file changed, 3 insertions(+), 2 deletions(-) > > > > diff --git a/migration/postcopy-ram.c b/migration/postcopy-ram.c > > index 3f98dcb6fd..8bef0192aa 100644 > > --- a/migration/postcopy-ram.c > > +++ b/migration/postcopy-ram.c > > @@ -1467,7 +1467,8 @@ retry: > > static int postcopy_temp_pages_setup(MigrationIncomingState *mis) > > { > > PostcopyTmpPage *tmp_page; > > - int err, i, channels; > > + int err; > > + unsigned i, channels; > > void *temp_page; > > if (migrate_postcopy_preempt()) { > > @@ -1479,7 +1480,7 @@ static int > > postcopy_temp_pages_setup(MigrationIncomingState *mis) > > } > > channels = mis->postcopy_channels; > > - mis->postcopy_tmp_pages = g_malloc0_n(sizeof(PostcopyTmpPage), > > channels); > > + mis->postcopy_tmp_pages = g_malloc0_n(channels, > > sizeof(PostcopyTmpPage)); > > I suppose we wanted to use: > > g_new0(PostcopyTmpPage, channels) > > What is the benefit of g_malloc0_n() over g_new0()?
g_malloc0_n should be used only in scenarios where you do NOT have a type you can pass to g_new0. For example in the audio code cap->buf = g_malloc0_n(hw->mix_buf.size, hw->info.bytes_per_frame); any calls to g_malloc0_n which use sizeof(some-type) in an arg are code style laws IMHO and should be changed to g_new0. Or to put it another way. g_new0 must always be used/preferred except in the handful of cases where it isn't possible. With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
