Damien Le Moal <damien.lem...@opensource.wdc.com> 于2022年6月29日周三 10:32写道: > > On 6/29/22 10:50, Sam Li wrote: > >>>>>>> + rep_size = sizeof(struct blk_zone_report) + nrz * sizeof(struct > >>>>>>> blk_zone); > >>>>>>> + g_autofree struct blk_zone_report *rep = g_new(struct > >>>>>>> blk_zone_report, nrz); > >>>>>> > >>>>>> g_new() looks incorrect. There should be 1 struct blk_zone_report > >>>>>> followed by nrz struct blk_zone structs. Please use g_malloc(rep_size) > >>>>>> instead. > >>>>> > >>>>> Yes! However, it still has a memory leak error when using g_autofree > >>>>> && g_malloc. > >>>> > >>>> That may be because you are changing the value of the rep pointer while > >>>> parsing the report ? > >>> > >>> I am not sure it is the case. Can you show me some way to find the > >>> problem? > >> > >> Not sure. I never used this g_malloc()/g_autofree() before so not sure how > >> it works. It may be that g_autofree() work only with g_new() ? > >> Could you try separating the declaration and allocation ? e.g. > >> > >> Declare at the beginning of the function: > >> g_autofree struct blk_zone_report *rep = NULL; > >> > >> And then when needed do: > >> > >> rep_size = sizeof(struct blk_zone_report) + nrz * sizeof(struct blk_zone); > >> rep = g_malloc(rep_size); > > > > Actually, the memory leak occurs in that way. When using zone_mgmt, > > memory leak still occurs. Asan gives the error information not much so > > I haven't tracked down the problem yet. > > See this: > > https://blog.fishsoup.net/2015/11/05/attributecleanup-mixed-declarations-and-code-and-goto/ > > Maybe you can find some hints.
Thanks! > > -- > Damien Le Moal > Western Digital Research