On 4 March 2016 at 16:35, Eric Blake <[email protected]> wrote: > On 03/04/2016 09:06 AM, Peter Maydell wrote: > >>>> +++ b/thunk.c >>>> @@ -88,7 +88,7 @@ void thunk_register_struct(int id, const char *name, >>>> const argtype *types) >>>> for(i = 0;i < 2; i++) { >>>> offset = 0; >>>> max_align = 1; >>>> - se->field_offsets[i] = malloc(nb_fields * sizeof(int)); >>>> + se->field_offsets[i] = g_malloc(nb_fields * sizeof(int)); >>>> type_ptr = se->field_types; >>>> for(j = 0;j < nb_fields; j++) { >>>> size = thunk_type_size(type_ptr, i); >>> >>> Where is the corresponding free()? g_malloc() must be paired with >>> g_free(), so you need to convert both places at once. >> >> There is no corresponding free(). thunk_register_struct() is called >> only at startup from the linux-user code in order to populate the >> struct_entries array; this data structure then remains live for >> the entire lifetime of the program and is automatically freed when >> QEMU exits. > > Fair enough. However, g_new(int, nb_fields) is probably a bit nicer > than g_malloc() (in that it would detect multiplication overflow if > nb_fields were ever oversized).
Yes, good idea. thanks -- PMM
