From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NfKIG-000134-Ne for qemu-devel@nongnu.org; Wed, 10 Feb 2010 16:40:20 -0500 Received: from [199.232.76.173] (port=37779 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NfKIG-00012t-BU for qemu-devel@nongnu.org; Wed, 10 Feb 2010 16:40:20 -0500 Received: from Debian-exim by monty-python.gnu.org with spam-scanned (Exim 4.60) (envelope-from ) id 1NfKIC-0001ns-Qo for qemu-devel@nongnu.org; Wed, 10 Feb 2010 16:40:20 -0500 Received: from mail-iw0-f194.google.com ([209.85.223.194]:53736) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NfKIC-0001no-J3 for qemu-devel@nongnu.org; Wed, 10 Feb 2010 16:40:16 -0500 Received: by iwn32 with SMTP id 32so905398iwn.14 for ; Wed, 10 Feb 2010 13:40:15 -0800 (PST) Message-ID: <4B7327BC.7070403@codemonkey.ws> Date: Wed, 10 Feb 2010 15:40:12 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] qemu-img: use the heap instead of the huge stack array for win32 References: In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: TeLeMan Cc: qemu-devel On 02/08/2010 02:20 AM, TeLeMan wrote: > The default stack size of PE is 1MB on win32 and IO_BUF_SIZE in > img_convert()& img_rebase() is 2MB, so qemu-img will crash when doing > "convert"& "rebase" on win32. > Although we can improve the stack size of PE to resolve it, I think we > should avoid using the huge stack variables. > > Signed-off-by: TeLeMan > Applied. Thanks. Regards, Anthony Liguori > --- > qemu-img.c | 14 +++++++++++--- > 1 files changed, 11 insertions(+), 3 deletions(-) > > diff --git a/qemu-img.c b/qemu-img.c > index bbfeea1..9994b3d 100644 > --- a/qemu-img.c > +++ b/qemu-img.c > @@ -571,7 +571,7 @@ static int img_convert(int argc, char **argv) > BlockDriverState **bs, *out_bs; > int64_t total_sectors, nb_sectors, sector_num, bs_offset; > uint64_t bs_sectors; > - uint8_t buf[IO_BUF_SIZE]; > + uint8_t * buf; > const uint8_t *buf1; > BlockDriverInfo bdi; > QEMUOptionParameter *param = NULL; > @@ -690,6 +690,7 @@ static int img_convert(int argc, char **argv) > bs_i = 0; > bs_offset = 0; > bdrv_get_geometry(bs[0],&bs_sectors); > + buf = qemu_malloc(IO_BUF_SIZE); > > if (flags& BLOCK_FLAG_COMPRESS) { > if (bdrv_get_info(out_bs,&bdi)< 0) > @@ -822,6 +823,7 @@ static int img_convert(int argc, char **argv) > } > } > } > + qemu_free(buf); > bdrv_delete(out_bs); > for (bs_i = 0; bs_i< bs_n; bs_i++) > bdrv_delete(bs[bs_i]); > @@ -1178,8 +1180,11 @@ static int img_rebase(int argc, char **argv) > uint64_t num_sectors; > uint64_t sector; > int n, n1; > - uint8_t buf_old[IO_BUF_SIZE]; > - uint8_t buf_new[IO_BUF_SIZE]; > + uint8_t * buf_old; > + uint8_t * buf_new; > + > + buf_old = qemu_malloc(IO_BUF_SIZE); > + buf_new = qemu_malloc(IO_BUF_SIZE); > > bdrv_get_geometry(bs,&num_sectors); > > @@ -1226,6 +1231,9 @@ static int img_rebase(int argc, char **argv) > written += pnum; > } > } > + > + qemu_free(buf_old); > + qemu_free(buf_new); > } > > /* >