From 8904cd55f128941d53d9a8beef71fb32a920a92d Mon Sep 17 00:00:00 2001 From: Michael Brown Date: Tue, 17 Feb 2009 00:47:35 +0000 Subject: [comboot] Allow for tail recursion of COMBOOT images Multi-level menus via COMBOOT rely on the COMBOOT program being able to exit and invoke a new COMBOOT program (the next menu). This works, but rapidly (within about five iterations) runs out of space in gPXE's internal stack, since each new image is executed in a new function context. Fix by allowing tail recursion between images; an image can now specify a replacement image for itself, and image_exec() will perform the necessary tail recursion. --- src/image/script.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) (limited to 'src/image') diff --git a/src/image/script.c b/src/image/script.c index fe7228851..2d2427463 100644 --- a/src/image/script.c +++ b/src/image/script.c @@ -43,10 +43,8 @@ static int script_exec ( struct image *image ) { int rc; /* Temporarily de-register image, so that a "boot" command - * doesn't throw us into an execution loop. Hold a reference - * to avoid the image's being freed. + * doesn't throw us into an execution loop. */ - image_get ( image ); unregister_image ( image ); while ( offset < image->len ) { @@ -80,7 +78,6 @@ static int script_exec ( struct image *image ) { done: /* Re-register image and return */ register_image ( image ); - image_put ( image ); return rc; } -- cgit v1.2.3-55-g7522