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();