Changeset: c7d0f81ede21 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c7d0f81ede21
Modified Files:
        sql/src/backends/monet5/sql_optimizer.mx
Branch: default
Log Message:

Merge with Oct2010 branch.


diffs (48 lines):

diff -r 640b5b25fda9 -r c7d0f81ede21 sql/src/backends/monet5/sql_optimizer.mx
--- a/sql/src/backends/monet5/sql_optimizer.mx  Wed Oct 13 14:31:44 2010 +0200
+++ b/sql/src/backends/monet5/sql_optimizer.mx  Wed Oct 13 14:33:39 2010 +0200
@@ -565,7 +565,7 @@
 setOptimizers(str optimizer)
 {
        int top=0;
-       char *base, *nxt, *nme, *pipe="notdefined";
+       char *base=0, *nxt, *nme, *pipe="notdefined";
        
        /* do nothing if the pipe line is already set */
        if ( optimizerpipe && optimizer && strcmp(optimizerpipe,optimizer) == 0 
)
@@ -581,7 +581,8 @@
        if(strcmp(optimizer,"off")==0){
                if( previouspipe )
                        return optimizerpipe;
-               previouspipe = optimizerpipe;
+               previouspipe = optimizerpipe;  /* give reference away */
+               optimizerpipe = NULL;
                pipe = GDKgetenv(minimalPipe);
                if ( pipe )
                        optimizer = pipe;
@@ -590,6 +591,7 @@
                if (previouspipe == NULL)
                        return optimizerpipe;
                optimizer= previouspipe;
+               base = previouspipe;  /* free this later */
                previouspipe = 0;
        } else {
                /* the optimizer may be an environment alias */
@@ -598,7 +600,16 @@
                        optimizer = pipe;
        }
 
-       optimizerpipe= optimizer;
+       /* always strdup the value assigned to optimizerpipe, so we
+          need to also free the old value, making sure we don't first
+          free the value that maybe we want to strdup (in case
+          optimizer==optimizerpipe) */
+       optimizer = GDKstrdup(optimizer);
+       if (base)               /* free old value of previouspipe */
+               GDKstrdup(base);
+       if (optimizerpipe)
+               GDKfree(optimizerpipe);
+       optimizerpipe = optimizer;
        base = optimizer = GDKstrdup(optimizer);
 
        /* An optimizer pipe is a comma separated list of names */
_______________________________________________
Checkin-list mailing list
Checkin-list@monetdb.org
http://mail.monetdb.org/mailman/listinfo/checkin-list

Reply via email to