]> granicus.if.org Git - postgis/commitdiff
Switch memory context back before returning in RASTER_bandmetadata
authorSandro Santilli <strk@keybit.net>
Thu, 5 Jan 2012 16:10:53 +0000 (16:10 +0000)
committerSandro Santilli <strk@keybit.net>
Thu, 5 Jan 2012 16:10:53 +0000 (16:10 +0000)
Fixes second case in #1432

git-svn-id: http://svn.osgeo.org/postgis/trunk@8678 b70326c6-7e19-0410-871a-916f4a2858ee

raster/rt_pg/rt_pg.c

index 78fb52a73e440fa6a45bdd44dd2da77569c4d1c2..d045714aedbc10b295b94724b5d38ec4edd1fd91 100644 (file)
@@ -7778,6 +7778,7 @@ Datum RASTER_bandmetadata(PG_FUNCTION_ARGS)
                /* raster */
                raster = rt_raster_deserialize(pgraster, FALSE);
                if (!raster) {
+                       MemoryContextSwitchTo(oldcontext);
                        elog(ERROR, "RASTER_bandmetadata: Could not deserialize raster");
                        SRF_RETURN_DONE(funcctx);
                }
@@ -7785,8 +7786,9 @@ Datum RASTER_bandmetadata(PG_FUNCTION_ARGS)
                /* numbands */
                numBands = rt_raster_get_num_bands(raster);
                if (numBands < 1) {
-                       elog(NOTICE, "Raster provided has no bands");
                        rt_raster_destroy(raster);
+                       MemoryContextSwitchTo(oldcontext);
+                       elog(NOTICE, "Raster provided has no bands");
                        SRF_RETURN_DONE(funcctx);
                }
 
@@ -7831,6 +7833,7 @@ Datum RASTER_bandmetadata(PG_FUNCTION_ARGS)
                                elog(NOTICE, "Invalid band index: %d. Indices must be 1-based. Returning NULL", idx);
                                pfree(bandNums);
                                rt_raster_destroy(raster);
+                               MemoryContextSwitchTo(oldcontext);
                                SRF_RETURN_DONE(funcctx);
                        }
 
@@ -7855,6 +7858,7 @@ Datum RASTER_bandmetadata(PG_FUNCTION_ARGS)
                        if (NULL == band) {
                                elog(NOTICE, "Could not get raster band at index %d", bandNums[i]);
                                rt_raster_destroy(raster);
+                               MemoryContextSwitchTo(oldcontext);
                                SRF_RETURN_DONE(funcctx);
                        }
 
@@ -7903,6 +7907,7 @@ Datum RASTER_bandmetadata(PG_FUNCTION_ARGS)
 
                /* Build a tuple descriptor for our result type */
                if (get_call_result_type(fcinfo, NULL, &tupdesc) != TYPEFUNC_COMPOSITE) {
+                       MemoryContextSwitchTo(oldcontext);
                        ereport(ERROR, (
                                errcode(ERRCODE_FEATURE_NOT_SUPPORTED),
                                errmsg(