[Monetdb-developers] [Monetdb-pf-checkins] pathfinder/compiler/mil milprint_summer.c, 1.367, 1.368

Jan Flokstra flokstra at cs.utwente.nl
Wed May 2 09:52:24 CEST 2007


I have great compilation troubles with the last lesson from the master:-) The 
compiler doesn not know the realloc() and the malloc() function() in the 
current setting. When I change them into PFrealloc() and PFmalloc() it 
compiles. But then I still have problems with the "free(buf);" line. There is 
no PFfree(); and I think GDKfree() will not always work,

JanF.

On Tuesday 01 May 2007 17:58, Sjoerd Mullender wrote:
> Update of /cvsroot/monetdb/pathfinder/compiler/mil
> In directory sc8-pr-cvs16:/tmp/cvs-serv17830
>
> Modified Files:
> 	milprint_summer.c
> Log Message:
> When you want to use a library function, make sure the appropriate
> include file is included.  For alloca there is an extra twist: for the
> way to include alloca.h see e.g. monet_utils.mx.  Do not hide the lack
> of a declaration with a cast.  The compiler then thinks the function
> returns an int which may well be smaller in space than the actual
> value, and hence some bytes of the value may get lost.
>
> Having said this, alloca should *not* be used in a loop.  It allocates
> memory in each iteration which is only freed at the end of the
> function.  If the loop loops many times, that can be a lot of memory
> which is allocated on the stack (which is a very finite resource!).
>
> Here ends today's lesson.
>
>
> Index: milprint_summer.c
> ===================================================================
> RCS file: /cvsroot/monetdb/pathfinder/compiler/mil/milprint_summer.c,v
> retrieving revision 1.367
> retrieving revision 1.368
> diff -u -d -r1.367 -r1.368
> --- milprint_summer.c	27 Apr 2007 18:22:40 -0000	1.367
> +++ milprint_summer.c	1 May 2007 15:57:59 -0000	1.368
> @@ -11140,12 +11140,18 @@
>          /* ============================= */
>          /* initialize function variables */
>          /* ============================= */
> +        size_t maxbufsize = 0;
> +        char *buf = NULL;
>          while (args->kind != c_nil)
>          {
>              /* get the type name, and assure there *is* a namespace */
>              char *tpe = PFty_str(TY(LR(args)));
> -            char *buf = (char*) alloca(4+strlen(tpe));
> -            char *nme = buf;
> +            char *nme;
> +            if (maxbufsize < strlen(tpe) + 4) {
> +                maxbufsize = strlen(tpe) + 4;
> +                buf = buf ? realloc(buf, maxbufsize) : malloc(maxbufsize);
> +            }
> +            nme = buf;
>              if (strchr(tpe, ':') == NULL)  {
>                  *buf++ = 'x';
>                  *buf++ = 's';
> @@ -11171,6 +11177,8 @@
>
>              args = R(args);
>          }
> +        if (buf)
> +            free(buf);
>          /* create the full signature that also is a valid MIL identifier
> */ c->sem.fun->sig = PFmalloc(12+3*(strlen(sig)+strlen(p)));
>
>
>
> -------------------------------------------------------------------------
> This SF.net email is sponsored by DB2 Express
> Download DB2 Express C - the FREE version of DB2 express and take
> control of your XML. No limits. Just data. Click to get it now.
> http://sourceforge.net/powerbar/db2/
> _______________________________________________
> Monetdb-pf-checkins mailing list
> Monetdb-pf-checkins at lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/monetdb-pf-checkins




More information about the developers-list mailing list