Changeset: 7b5567cc9e68 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7b5567cc9e68
Modified Files:
        gdk/gdk_system.c
        sql/test/Tests/systemfunctions.stable.out
        sql/test/Tests/systemfunctions.stable.out.int128
        sql/test/leaks/Tests/check0.stable.out
        sql/test/leaks/Tests/check0.stable.out.int128
        sql/test/leaks/Tests/check1.stable.out
        sql/test/leaks/Tests/check1.stable.out.int128
        sql/test/leaks/Tests/check2.stable.out
        sql/test/leaks/Tests/check2.stable.out.int128
        sql/test/leaks/Tests/check3.stable.out
        sql/test/leaks/Tests/check3.stable.out.int128
        sql/test/leaks/Tests/check4.stable.out
        sql/test/leaks/Tests/check4.stable.out.int128
        sql/test/leaks/Tests/check5.stable.out
        sql/test/leaks/Tests/check5.stable.out.int128
        tools/merovingian/utils/utils.c
Branch: default
Log Message:

Merge with Jun2016 branch.


diffs (81 lines):

diff --git a/gdk/gdk_system.c b/gdk/gdk_system.c
--- a/gdk/gdk_system.c
+++ b/gdk/gdk_system.c
@@ -237,18 +237,25 @@ void
 join_detached_threads(void)
 {
        struct winthread *w;
+       int waited;
 
-       EnterCriticalSection(&winthread_cs);
-       while (winthreads) {
-               w = winthreads;
-               winthreads = w->next;
+       do {
+               waited = 0;
+               EnterCriticalSection(&winthread_cs);
+               for (w = winthreads; w; w = w->next) {
+                       if ((w->flags & (DETACHED | WAITING)) == DETACHED) {
+                               w->flags |= WAITING;
+                               LeaveCriticalSection(&winthread_cs);
+                               WaitForSingleObject(w->hdl, INFINITE);
+                               CloseHandle(w->hdl);
+                               rm_winthread(w);
+                               waited = 1;
+                               EnterCriticalSection(&winthread_cs);
+                               break;
+                       }
+               }
                LeaveCriticalSection(&winthread_cs);
-               WaitForSingleObject(w->hdl, INFINITE);
-               CloseHandle(w->hdl);
-               free(w);
-               EnterCriticalSection(&winthread_cs);
-       }
-       LeaveCriticalSection(&winthread_cs);
+       } while (waited);
 }
 
 int
diff --git a/sql/test/Tests/systemfunctions.stable.out 
b/sql/test/Tests/systemfunctions.stable.out
--- a/sql/test/Tests/systemfunctions.stable.out
+++ b/sql/test/Tests/systemfunctions.stable.out
@@ -690,7 +690,7 @@ Ready.
 [ "sys",       "gethost",      1,      "url",  ""      ]
 [ "sys",       "getport",      0,      "clob", "create function getport(theurl 
url) returns string\n external name url.\"getPort\";"   ]
 [ "sys",       "getport",      1,      "url",  ""      ]
-[ "sys",       "getproj4",     0,      "clob", "create function 
getproj4(srid_in integer) returns string \nbegin\n return select proj4text from 
spatial_ref_sys where srid=srid_in; \nend;"    ]
+[ "sys",       "getproj4",     0,      "clob", "create function 
getproj4(srid_in integer) returns string\nbegin\n return select proj4text from 
spatial_ref_sys where srid=srid_in;\nend;"      ]
 [ "sys",       "getproj4",     1,      "int",  ""      ]
 [ "sys",       "getprotocol",  0,      "clob", "create function 
getprotocol(theurl url) returns string\n external name url.\"getProtocol\";"   ]
 [ "sys",       "getprotocol",  1,      "url",  ""      ]
@@ -4012,7 +4012,7 @@ Ready.
 [ "sys",       "st_touches",   0,      "boolean",      "create function 
st_touches(geom1 geometry, geom2 geometry) returns boolean external name 
geom.\"Touches\";"    ]
 [ "sys",       "st_touches",   1,      "geometry",     ""      ]
 [ "sys",       "st_touches",   2,      "geometry",     ""      ]
-[ "sys",       "st_transform", 0,      "geometry",     "create function 
st_transform(geom geometry, srid integer) returns geometry\nbegin\n declare 
srid_src integer;\n declare proj4_src string;\n declare proj4_dest string;\n 
select st_srid(geom) into srid_src;\n select getproj4(srid_src) into 
proj4_src;\n select getproj4(srid) into proj4_dest;\n if proj4_src is null 
then\n return select internaltransform(geom, srid_src, srid, 'null', 
proj4_dest); \n else\n if proj4_dest is null then\n return select 
internaltransform(geom, srid_src, srid, proj4_src, 'null'); \n else\n return 
select internaltransform(geom, srid_src, srid, proj4_src, proj4_dest);\n end 
if; \n end if;\nend;"        ]
+[ "sys",       "st_transform", 0,      "geometry",     "create function 
st_transform(geom geometry, srid integer) returns geometry\nbegin\n declare 
srid_src integer;\n declare proj4_src string;\n declare proj4_dest string;\n 
select st_srid(geom) into srid_src;\n select getproj4(srid_src) into 
proj4_src;\n select getproj4(srid) into proj4_dest;\n if proj4_src is null 
then\n return select internaltransform(geom, srid_src, srid, 'null', 
proj4_dest);\n else\n if proj4_dest is null then\n return select 
internaltransform(geom, srid_src, srid, proj4_src, 'null');\n else\n return 
select internaltransform(geom, srid_src, srid, proj4_src, proj4_dest);\n end 
if;\n end if;\nend;"   ]
 [ "sys",       "st_transform", 1,      "geometry",     ""      ]
 [ "sys",       "st_transform", 2,      "int",  ""      ]
 [ "sys",       "st_translate", 0,      "geometry",     "create function 
st_translate(geom geometry, dx double, dy double) returns geometry external 
name geom.\"Translate\";"  ]
diff --git a/sql/test/Tests/systemfunctions.stable.out.int128 
b/sql/test/Tests/systemfunctions.stable.out.int128
--- a/sql/test/Tests/systemfunctions.stable.out.int128
+++ b/sql/test/Tests/systemfunctions.stable.out.int128
@@ -734,7 +734,7 @@ Ready.
 [ "sys",       "gethost",      1,      "url",  ""      ]
 [ "sys",       "getport",      0,      "clob", "create function getport(theurl 
url) returns string\n external name url.\"getPort\";"   ]
 [ "sys",       "getport",      1,      "url",  ""      ]
-[ "sys",       "getproj4",     0,      "clob", "create function 
getproj4(srid_in integer) returns string \nbegin\n return select proj4text from 
spatial_ref_sys where srid=srid_in; \nend;"    ]
+[ "sys",       "getproj4",     0,      "clob", "create function 
getproj4(srid_in integer) returns string\nbegin\n return select proj4text from 
spatial_ref_sys where srid=srid_in;\nend;"      ]
 [ "sys",       "getproj4",     1,      "int",  ""      ]
 [ "sys",       "getprotocol",  0,      "clob", "create function 
getprotocol(theurl url) returns string\n external name url.\"getProtocol\";"   ]
 [ "sys",       "getprotocol",  1,      "url",  ""      ]
@@ -4526,7 +4526,7 @@ Ready.
 [ "sys",       "st_touches",   0,      "boolean",      "create function 
st_touches(geom1 geometry, geom2 geometry) returns boolean external name 
geom.\"Touches\";"    ]
 [ "sys",       "st_touches",   1,      "geometry",     ""      ]
 [ "sys",       "st_touches",   2,      "geometry",     ""      ]
-[ "sys",       "st_transform", 0,      "geometry",     "create function 
st_transform(geom geometry, srid integer) returns geometry\nbegin\n declare 
srid_src integer;\n declare proj4_src string;\n declare proj4_dest string;\n 
select st_srid(geom) into srid_src;\n select getproj4(srid_src) into 
proj4_src;\n select getproj4(srid) into proj4_dest;\n if proj4_src is null 
then\n return select internaltransform(geom, srid_src, srid, 'null', 
proj4_dest); \n else\n if proj4_dest is null then\n return select 
internaltransform(geom, srid_src, srid, proj4_src, 'null'); \n else\n return 
select internaltransform(geom, srid_src, srid, proj4_src, proj4_dest);\n end 
if; \n end if;\nend;"        ]
+[ "sys",       "st_transform", 0,      "geometry",     "create function 
st_transform(geom geometry, srid integer) returns geometry\nbegin\n declare 
srid_src integer;\n declare proj4_src string;\n declare proj4_dest string;\n 
select st_srid(geom) into srid_src;\n select getproj4(srid_src) into 
proj4_src;\n select getproj4(srid) into proj4_dest;\n if proj4_src is null 
then\n return select internaltransform(geom, srid_src, srid, 'null', 
proj4_dest);\n else\n if proj4_dest is null then\n return select 
internaltransform(geom, srid_src, srid, proj4_src, 'null');\n else\n return 
select internaltransform(geom, srid_src, srid, proj4_src, proj4_dest);\n end 
if;\n end if;\nend;"   ]
 [ "sys",       "st_transform", 1,      "geometry",     ""      ]
 [ "sys",       "st_transform", 2,      "int",  ""      ]
 [ "sys",       "st_translate", 0,      "geometry",     "create function 
st_translate(geom geometry, dx double, dy double) returns geometry external 
name geom.\"Translate\";"  ]
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to