Changeset: 741c94abe09d for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=741c94abe09d
Added Files:
        sql/test/BugTracker-2019/Tests/view-too-few-rows.Bug-6736.sql
        sql/test/BugTracker-2019/Tests/view-too-few-rows.Bug-6736.stable.err
        sql/test/BugTracker-2019/Tests/view-too-few-rows.Bug-6736.stable.out
Modified Files:
        clients/Tests/MAL-signatures.stable.out
        clients/Tests/MAL-signatures.stable.out.int128
        gdk/gdk_bbp.c
        gdk/gdk_system.c
        gdk/gdk_system.h
        monetdb5/mal/mal_instruction.c
        monetdb5/modules/mal/mal_mapi.c
        sql/backends/monet5/UDF/capi/Tests/capi09.stable.out
        sql/backends/monet5/UDF/pyapi/pyapi.c
        sql/backends/monet5/rel_bin.c
        sql/backends/monet5/sql.c
        sql/backends/monet5/sql.h
        sql/backends/monet5/sql.mal
        sql/backends/monet5/sql_gencode.c
        sql/backends/monet5/sql_result.c
        sql/backends/monet5/sql_upgrades.c
        sql/backends/monet5/vaults/bam/Tests/query2.1.stable.out
        sql/backends/monet5/vaults/bam/Tests/query2.10.stable.out
        sql/backends/monet5/vaults/bam/Tests/query2.11.stable.out
        sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out
        sql/backends/monet5/vaults/bam/Tests/query2.2.stable.out.int128
        sql/backends/monet5/vaults/bam/Tests/query2.8.stable.out
        sql/backends/monet5/vaults/bam/bam_loader.c
        sql/backends/monet5/wlr.c
        sql/include/sql_relation.h
        sql/scripts/25_debug.sql
        sql/server/rel_distribute.c
        sql/server/rel_dump.c
        sql/server/rel_exp.c
        sql/server/rel_exp.h
        sql/server/rel_optimizer.c
        sql/server/rel_propagate.c
        sql/server/rel_rel.c
        sql/server/rel_rel.h
        sql/server/rel_schema.c
        sql/server/rel_select.c
        sql/server/rel_updates.c
        sql/server/sql_mvc.h
        sql/storage/bat/bat_storage.c
        sql/storage/sql_storage.h
        sql/storage/store.c
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out
        sql/test/BugTracker-2011/Tests/crash_on_alias.Bug-2798.stable.out.int128
        
sql/test/BugTracker-2012/Tests/order_by_on_column_exp.Bug-3193.stable.out
        sql/test/BugTracker-2013/Tests/restore-uuid.Bug-3407.stable.out
        
sql/test/BugTracker-2014/Tests/crash_on_groupby_distinct_serial.Bug-3463.stable.out
        sql/test/BugTracker-2014/Tests/groupby_distict.Bug-3423.stable.out
        sql/test/BugTracker-2014/Tests/type_resolution.Bug-3622.stable.out
        sql/test/BugTracker-2014/Tests/typecast_error.Bug-3622.stable.out
        sql/test/BugTracker-2015/Tests/uuid-compare.Bug-3827.stable.out
        
sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.out
        
sql/test/BugTracker-2016/Tests/column_alias_in_where_clause.Bug-3947.stable.out.int128
        sql/test/BugTracker-2016/Tests/isaUUID_function.Bug-3997.stable.out
        
sql/test/BugTracker-2016/Tests/min-max-uuid-column-wrong-results.Bug-3953.stable.out
        
sql/test/BugTracker-2018/Tests/count_from_commented_function_signatures.Bug-6542.stable.out
        
sql/test/BugTracker-2018/Tests/remote-table-where-is-null.Bug-6601.stable.out
        
sql/test/BugTracker-2018/Tests/remote-table-where-not-equal.Bug-6621.stable.out
        sql/test/BugTracker-2019/Tests/All
        
sql/test/BugTracker-2019/Tests/merge-statement-aliases.Bug-6715.stable.err
        
sql/test/BugTracker-2019/Tests/merge-statement-aliases.Bug-6715.stable.out
        
sql/test/BugTracker/Tests/groupby_with_alias.SF-1520575.stable.out.int128
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-1join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-query.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-plan-2join-view.stable.out
        
sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-prologue.stable.out
        sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        
sql/test/emptydb-upgrade-chain-hge/Tests/upgrade.stable.out.powerpc64.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.32bit
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade-chain/Tests/upgrade.stable.out.powerpc64.int128
        sql/test/emptydb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out.32bit
        sql/test/emptydb-upgrade/Tests/upgrade.stable.out.int128
        sql/test/emptydb/Tests/check.stable.out
        sql/test/emptydb/Tests/check.stable.out.32bit
        sql/test/emptydb/Tests/check.stable.out.int128
        sql/test/orderidx/Tests/imprints_all_types.stable.out
        sql/test/orderidx/Tests/oidx_all_types.stable.out
        sql/test/pg_regress/Tests/numerology.stable.out
        sql/test/sys-schema/Tests/systemfunctions.stable.out
        sql/test/sys-schema/Tests/systemfunctions.stable.out.int128
        sql/test/testdb-upgrade-chain-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.32bit
        sql/test/testdb-upgrade-chain/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade-hge/Tests/upgrade.stable.out.int128
        sql/test/testdb-upgrade/Tests/upgrade.stable.out
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.32bit
        sql/test/testdb-upgrade/Tests/upgrade.stable.out.int128
Branch: cmake-monetdblite
Log Message:

Merge with cmake-fun.


diffs (truncated from 5232 to 300 lines):

diff --git a/clients/Tests/MAL-signatures.stable.out 
b/clients/Tests/MAL-signatures.stable.out
--- a/clients/Tests/MAL-signatures.stable.out
+++ b/clients/Tests/MAL-signatures.stable.out
@@ -56,10 +56,9 @@ stdout of test 'MAL-signatures` in direc
 # MonetDB/Python2 module loaded
 # MonetDB/R   module loaded
 
-
-# 14:39:22 >  
-# 14:39:22 >  "mclient" "-lsql" "-ftest" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-23085" "--port=30158"
-# 14:39:22 >  
+# 16:19:19 >  
+# 16:19:19 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-28001" "--port=38663"
+# 16:19:19 >  
 
 #select * from sys.malfunctions() order by module, "function", address, 
signature, comment;
 % .L1, .L1,    .L1,    .L1,    .L1 # table_name
@@ -11631,7 +11630,9 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "delete",       "unsafe pattern sql.delete(mvc:int, sname:str, 
tname:str, b:any):int ", "mvc_delete_wrap;",     "Delete a row from a table. 
Returns sequence number for order dependece."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ",     "DELTAbat2;",   "Return 
column bat with delta's applied."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ",    
"DELTAbat;",    "Return column bat with delta's applied."       ]
-[ "sql",       "deltas",       "pattern sql.deltas(schema:str, table:str, 
column:str):bat[:lng] ",     "mvc_delta_values;",    "Return the delta values 
sizes of a bat, plus the current transaction level"    ]
+[ "sql",       "deltas",       "pattern sql.deltas(schema:str) (ids:bat[:int], 
cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], 
deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;",    "Return the 
delta values sizes of all columns of the schema's tables, plus the current 
transaction level"       ]
+[ "sql",       "deltas",       "pattern sql.deltas(schema:str, table:str) 
(ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], 
updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ",      
"mvc_delta_values;",    "Return the delta values sizes from the table's 
columns, plus the current transaction level"    ]
+[ "sql",       "deltas",       "pattern sql.deltas(schema:str, table:str, 
column:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], 
inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) 
",  "mvc_delta_values;",    "Return the delta values sizes of a column, plus 
the current transaction level" ]
 [ "sql",       "dense_rank",   "pattern sql.dense_rank(b:any_1, p:bit, 
o:bit):int ",   "SQLdense_rank;",       "return the densely ranked groups"      
]
 [ "sql",       "diff", "pattern sql.diff(b:any_1):bit ",       "SQLdiff;",     
"return true if cur != prev row"        ]
 [ "sql",       "diff", "pattern sql.diff(p:bit, b:any_1):bit ",        
"SQLdiff;",     "return true if cur != prev row"        ]
diff --git a/clients/Tests/MAL-signatures.stable.out.int128 
b/clients/Tests/MAL-signatures.stable.out.int128
--- a/clients/Tests/MAL-signatures.stable.out.int128
+++ b/clients/Tests/MAL-signatures.stable.out.int128
@@ -60,10 +60,9 @@ stdout of test 'MAL-signatures` in direc
 # MonetDB/Python2 module loaded
 # MonetDB/R   module loaded
 
-
-# 16:09:44 >  
-# 16:09:44 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-1158" "--port=39285"
-# 16:09:44 >  
+# 16:10:29 >  
+# 16:10:29 >  "mclient" "-lsql" "-ftest" "-tnone" "-Eutf-8" "-i" "-e" 
"--host=/var/tmp/mtest-29643" "--port=32888"
+# 16:10:29 >  
 
 #select * from sys.malfunctions() order by module, "function", address, 
signature, comment;
 % .L1, .L1,    .L1,    .L1,    .L1 # table_name
@@ -16045,7 +16044,9 @@ stdout of test 'MAL-signatures` in direc
 [ "sql",       "delete",       "unsafe pattern sql.delete(mvc:int, sname:str, 
tname:str, b:any):int ", "mvc_delete_wrap;",     "Delete a row from a table. 
Returns sequence number for order dependece."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3]):bat[:any_3] ",     "DELTAbat2;",   "Return 
column bat with delta's applied."       ]
 [ "sql",       "delta",        "command sql.delta(col:bat[:any_3], 
uid:bat[:oid], uval:bat[:any_3], ins:bat[:any_3]):bat[:any_3] ",    
"DELTAbat;",    "Return column bat with delta's applied."       ]
-[ "sql",       "deltas",       "pattern sql.deltas(schema:str, table:str, 
column:str):bat[:lng] ",     "mvc_delta_values;",    "Return the delta values 
sizes of a bat, plus the current transaction level"    ]
+[ "sql",       "deltas",       "pattern sql.deltas(schema:str) (ids:bat[:int], 
cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], updated:bat[:lng], 
deleted:bat[:lng], tr_level:bat[:int]) ", "mvc_delta_values;",    "Return the 
delta values sizes of all columns of the schema's tables, plus the current 
transaction level"       ]
+[ "sql",       "deltas",       "pattern sql.deltas(schema:str, table:str) 
(ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], inserted:bat[:lng], 
updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) ",      
"mvc_delta_values;",    "Return the delta values sizes from the table's 
columns, plus the current transaction level"    ]
+[ "sql",       "deltas",       "pattern sql.deltas(schema:str, table:str, 
column:str) (ids:bat[:int], cleared:bat[:bit], readonly:bat[:lng], 
inserted:bat[:lng], updated:bat[:lng], deleted:bat[:lng], tr_level:bat[:int]) 
",  "mvc_delta_values;",    "Return the delta values sizes of a column, plus 
the current transaction level" ]
 [ "sql",       "dense_rank",   "pattern sql.dense_rank(b:any_1, p:bit, 
o:bit):int ",   "SQLdense_rank;",       "return the densely ranked groups"      
]
 [ "sql",       "diff", "pattern sql.diff(b:any_1):bit ",       "SQLdiff;",     
"return true if cur != prev row"        ]
 [ "sql",       "diff", "pattern sql.diff(p:bit, b:any_1):bit ",        
"SQLdiff;",     "return true if cur != prev row"        ]
diff --git a/gdk/gdk_bbp.c b/gdk/gdk_bbp.c
--- a/gdk/gdk_bbp.c
+++ b/gdk/gdk_bbp.c
@@ -3284,6 +3284,7 @@ BBPbackup(BAT *b, bool subcommit)
        char *srcdir;
        long_str nme;
        const char *s = BBP_physical(b->batCacheid);
+       size_t slen;
 
        if (BBPprepare(subcommit) != GDK_SUCCEED) {
                return GDK_FAIL;
@@ -3297,8 +3298,11 @@ BBPbackup(BAT *b, bool subcommit)
        s = strrchr(srcdir, DIR_SEP);
        if (!s)
                goto fail;
-       strncpy(nme, ++s, sizeof(nme));
-       nme[sizeof(nme) - 1] = 0;
+
+       slen = strlen(++s);
+       if (slen >= sizeof(nme))
+               goto fail;
+       memcpy(nme, s, slen + 1);
        srcdir[s - srcdir] = 0;
 
        if (b->ttype != TYPE_void &&
diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -713,8 +713,18 @@ MT_create_thread(MT_Id *t, void (*f) (vo
        int ret;
        struct posthread *p;
        sigset_t new_mask, orig_mask;
+       size_t tlen;
 
        join_threads();
+       if (threadname == NULL) {
+               fprintf(stderr, "#MT_create_thread: thread must have a name\n");
+               return -1;
+       }
+       tlen = strlen(threadname);
+       if (tlen >= sizeof(p->threadname)) {
+               fprintf(stderr, "#MT_create_thread: thread's name is too 
large\n");
+               return -1;
+       }
        if ((ret = pthread_attr_init(&attr)) != 0) {
                MT_fprintf(stderr,
                        "#MT_create_thread: cannot init pthread attr: %s\n",
@@ -743,8 +753,8 @@ MT_create_thread(MT_Id *t, void (*f) (vo
                .detached = (d == MT_THR_DETACHED),
        };
        ATOMIC_INIT(&p->exited, 0);
-       strncpy(p->threadname, threadname, sizeof(p->threadname));
-       p->threadname[sizeof(p->threadname) - 1] = 0;
+
+       memcpy(p->threadname, threadname, tlen + 1);
        pthread_mutex_lock(&posthread_lock);
        p->next = posthreads;
        posthreads = p;
diff --git a/gdk/gdk_system.h b/gdk/gdk_system.h
--- a/gdk/gdk_system.h
+++ b/gdk/gdk_system.h
@@ -440,12 +440,16 @@ typedef struct MT_Lock {
                _DBG_LOCK_COUNT_2(l);                                   \
        } while (0)
 
-#define MT_lock_init(l, n)                                     \
-       do {                                                    \
-               ATOMIC_CLEAR(&(l)->lock);                       \
-               strncpy((l)->name, (n), sizeof((l)->name));     \
-               (l)->name[sizeof((l)->name) - 1] = 0;           \
-               _DBG_LOCK_INIT(l);                              \
+#define MT_lock_init(l, n)                             \
+       do {                                            \
+               size_t nlen;                            \
+               ATOMIC_CLEAR(&(l)->lock);               \
+               nlen = strlen(n);                       \
+               if (nlen >= sizeof((l)->name))          \
+                       nlen = sizeof((l)->name) - 1;   \
+               memcpy((l)->name, (n), nlen + 1);       \
+               (l)->name[sizeof((l)->name) - 1] = 0;   \
+               _DBG_LOCK_INIT(l);                      \
        } while (0)
 
 #define MT_lock_unset(l)                                       \
diff --git a/monetdb5/mal/mal_instruction.c b/monetdb5/mal/mal_instruction.c
--- a/monetdb5/mal/mal_instruction.c
+++ b/monetdb5/mal/mal_instruction.c
@@ -387,14 +387,20 @@ getMalBlkOptimized(MalBlkPtr mb, str nam
        InstrPtr p;
        int i= 0;
        char buf[IDLENGTH]= {0}, *n;
+       size_t nlen;
 
        if( name == 0)
                return mb;
-       strncpy(buf,name, IDLENGTH);
-       buf[IDLENGTH - 1] = 0;
+
+       nlen = strlen(name);
+       if (nlen >= sizeof(buf)) {
+               mb->errors = createMalException(mb,0, TYPE, "Optimizer name is 
too large");
+               return NULL;
+       }
+       memcpy(buf, name, nlen + 1);
        n = strchr(buf,']');
        if( n) *n = 0;
-       
+
        while (h ){
                for( i = 1; i< h->stop; i++){
                        p = getInstrPtr(h,i);
diff --git a/monetdb5/modules/mal/mal_mapi.c b/monetdb5/modules/mal/mal_mapi.c
--- a/monetdb5/modules/mal/mal_mapi.c
+++ b/monetdb5/modules/mal/mal_mapi.c
@@ -282,11 +282,9 @@ SERVERlistenThread(SOCKET *Sock)
        MT_Id tid;
        stream *s;
 
-       if (*Sock) {
-               sock = Sock[0];
-               usock = Sock[1];
-               GDKfree(Sock);
-       }
+       sock = Sock[0];
+       usock = Sock[1];
+       GDKfree(Sock);
 
        (void) ATOMIC_INC(&nlistener);
 
@@ -499,7 +497,7 @@ static const struct in6_addr ipv6_loopba
 static const struct in6_addr ipv6_any_addr = IN6ADDR_ANY_INIT;
 
 static str
-SERVERlisten(int *Port, const char *Usockfile, int *Maxusers)
+SERVERlisten(int port, const char *usockfile, int maxusers)
 {
        struct sockaddr* server = NULL;
        struct sockaddr_in server_ipv4;
@@ -517,9 +515,6 @@ SERVERlisten(int *Port, const char *Usoc
        int on = 1;
        int i = 0;
        MT_Id pid;
-       int port;
-       int maxusers;
-       char *usockfile;
        str buf;
        char host[128];
        const char *listenaddr;
@@ -538,33 +533,18 @@ SERVERlisten(int *Port, const char *Usoc
                return MAL_SUCCEED;
        }
 
-       if (listenaddr && accept_any)
-               throw(ILLARG,"mal_mapi.listen", OPERATION_FAILED
-                                                                          ": 
mapi_open and mapi_listenaddr cannot be set at the same time");
-
-       psock = GDKmalloc(sizeof(SOCKET) * 3);
+       psock = GDKmalloc(sizeof(SOCKET) * 2);
        if (psock == NULL)
                throw(MAL,"mal_mapi.listen", SQLSTATE(HY001) MAL_MALLOC_FAIL);
 
-       port = *Port;
-       if (Usockfile == NULL || *Usockfile == 0 ||
-               strcmp(Usockfile, str_nil) == 0)
-       {
+       if (usockfile == NULL || strcmp(usockfile, str_nil) == 0) {
                usockfile = NULL;
        } else {
-#ifndef NATIVE_WIN32
-               usockfile = GDKstrdup(Usockfile);
-               if (usockfile == NULL) {
-                       GDKfree(psock);
-                       throw(MAL,"mal_mapi.listen", SQLSTATE(HY001) 
MAL_MALLOC_FAIL);
-               }
-#else
-               usockfile = NULL;
+#ifdef NATIVE_WIN32
                GDKfree(psock);
                throw(IO, "mal_mapi.listen", OPERATION_FAILED ": UNIX domain 
sockets are not supported");
 #endif
        }
-       maxusers = *Maxusers;
        maxusers = (maxusers ? maxusers : SERVERMAXUSERS);
 
        if (port <= 0 && usockfile == NULL) {
@@ -574,7 +554,6 @@ SERVERlisten(int *Port, const char *Usoc
 
        if (port > 65535) {
                GDKfree(psock);
-               GDKfree(usockfile);
                throw(ILLARG, "mal_mapi.listen", OPERATION_FAILED ": port 
number should be between 1 and 65535");
        }
 
@@ -598,7 +577,6 @@ SERVERlisten(int *Port, const char *Usoc
                                                continue;
                                        }
                                        GDKfree(psock);
-                                       GDKfree(usockfile);
                                        throw(IO, "mal_mapi.listen", 
OPERATION_FAILED
                                                          ": bind to stream 
socket on address %s and port %d failed: %s", listenaddr, port,
                                                          gai_strerror(check));
@@ -641,7 +619,6 @@ SERVERlisten(int *Port, const char *Usoc
 
                                if (port > 65535) {
                                        GDKfree(psock);
-                                       GDKfree(usockfile);
                                        throw(IO, "mal_mapi.listen", 
OPERATION_FAILED ": bind to stream socket port %d failed", port);
                                } else if (
 #ifdef _MSC_VER
@@ -657,7 +634,6 @@ SERVERlisten(int *Port, const char *Usoc
                                                                continue;
                                }
                                GDKfree(psock);
-                               GDKfree(usockfile);
                                errno = e;
                                throw(IO, "mal_mapi.listen", OPERATION_FAILED 
": bind to stream socket port %d failed: %s", port,
 #ifdef _MSC_VER
@@ -676,7 +652,6 @@ SERVERlisten(int *Port, const char *Usoc
                        if (sock == INVALID_SOCKET) {
                                int e = errno;
                                GDKfree(psock);
-                               GDKfree(usockfile);
                                errno = e;
                                throw(IO, "mal_mapi.listen",
                                          OPERATION_FAILED ": bind to stream 
socket port %d "
@@ -700,7 +675,6 @@ SERVERlisten(int *Port, const char *Usoc
                                const char *err = strerror(errno);
 #endif
                                GDKfree(psock);
-                               GDKfree(usockfile);
                                closesocket(sock);
                                errno = e;
                                throw(IO, "mal_mapi.listen", OPERATION_FAILED 
": setsockptr failed %s", err);
@@ -751,7 +725,6 @@ SERVERlisten(int *Port, const char *Usoc
                                        }
                                        closesocket(sock);
                                        GDKfree(psock);
-                                       GDKfree(usockfile);
                                        errno = e;
                                        throw(IO, "mal_mapi.listen", 
OPERATION_FAILED ": bind to stream socket port %d failed: %s", port,
 #ifdef _MSC_VER
@@ -769,7 +742,6 @@ SERVERlisten(int *Port, const char *Usoc
                                int e = errno;
                                closesocket(sock);
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to