]> granicus.if.org Git - postgresql/commitdiff
Fix bogus order of cleanup steps in plperl_inline_handler.
authorTom Lane <tgl@sss.pgh.pa.us>
Sun, 18 Apr 2010 19:16:06 +0000 (19:16 +0000)
committerTom Lane <tgl@sss.pgh.pa.us>
Sun, 18 Apr 2010 19:16:06 +0000 (19:16 +0000)
Per Alex Hunsaker

src/pl/plperl/plperl.c

index c622b6440847b6258b4c8c0a343ecb6b6e76eda2..9ad2d40d114778ae27918e27e5c5f9cbb20413c4 100644 (file)
@@ -1,7 +1,7 @@
 /**********************************************************************
  * plperl.c - perl as a procedural language for PostgreSQL
  *
- *       $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.173 2010/03/18 19:02:46 petere Exp $
+ *       $PostgreSQL: pgsql/src/pl/plperl/plperl.c,v 1.174 2010/04/18 19:16:06 tgl Exp $
  *
  **********************************************************************/
 
@@ -1153,19 +1153,20 @@ plperl_inline_handler(PG_FUNCTION_ARGS)
        }
        PG_CATCH();
        {
-               current_call_data = save_call_data;
-               restore_context(oldcontext);
                if (desc.reference)
                        SvREFCNT_dec(desc.reference);
+               current_call_data = save_call_data;
+               restore_context(oldcontext);
                PG_RE_THROW();
        }
        PG_END_TRY();
 
-       current_call_data = save_call_data;
-       restore_context(oldcontext);
        if (desc.reference)
                SvREFCNT_dec(desc.reference);
 
+       current_call_data = save_call_data;
+       restore_context(oldcontext);
+
        error_context_stack = pl_error_context.previous;
 
        PG_RETURN_VOID();