Skip to content

Commit cced0a5

Browse files
committed
fix missing fcache when fmgr hook is called in unexpected order
1 parent be7e77e commit cced0a5

8 files changed

+9951
-1
lines changed

expected/README

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
plpgsql_check_passive.out PostgreSQL 14, 15, 16
22
plpgsql_check_passive_1.out PostgreSQL 12, 13
3+
plpgsql_check_passive_2.out PostgreSQL 18
34
plpgsql_check_active_1.out PostgreSQL 12, 13
45
plpgsql_check_active_2.out PostgreSQL 14, 15, 16
5-
plpgsql_check_active.out PostgreSQL 17, 18
6+
plpgsql_check_active_3.out PostgreSQL 18
7+
plpgsql_check_active.out PostgreSQL 17

expected/plpgsql_check_active.out

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9396,3 +9396,34 @@ set plpgsql_check.cursors_leaks to on;
93969396
do $$ declare c cursor for select 1; begin open c; call p1(); end $$;
93979397
set plpgsql_check.cursors_leaks to default;
93989398
drop procedure p1;
9399+
-- should not crash
9400+
create or replace function nested_trace_test(a int)
9401+
returns int as $$
9402+
begin
9403+
perform plpgsql_check_pragma('enable:tracer');
9404+
return a + 1;
9405+
end;
9406+
$$ language plpgsql;
9407+
create or replace function trace_test(b int)
9408+
returns int as $$
9409+
declare r int default 0;
9410+
begin
9411+
for i in 1..b
9412+
loop
9413+
r := nested_trace_test(r);
9414+
end loop;
9415+
return r;
9416+
end;
9417+
$$ language plpgsql;
9418+
-- when plpgsql_check is not loaded yet, then plpgsql_check is
9419+
-- load by perform plpgsql_check_pragma and this is another
9420+
-- case, when fmgr hook is not called in expected order.
9421+
\c
9422+
-- should not to crash
9423+
select trace_test(3);
9424+
WARNING: late initialization of fmgr_plpgsql_cache
9425+
trace_test
9426+
------------
9427+
3
9428+
(1 row)
9429+

expected/plpgsql_check_active_1.out

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9398,3 +9398,34 @@ set plpgsql_check.cursors_leaks to on;
93989398
do $$ declare c cursor for select 1; begin open c; call p1(); end $$;
93999399
set plpgsql_check.cursors_leaks to default;
94009400
drop procedure p1;
9401+
-- should not crash
9402+
create or replace function nested_trace_test(a int)
9403+
returns int as $$
9404+
begin
9405+
perform plpgsql_check_pragma('enable:tracer');
9406+
return a + 1;
9407+
end;
9408+
$$ language plpgsql;
9409+
create or replace function trace_test(b int)
9410+
returns int as $$
9411+
declare r int default 0;
9412+
begin
9413+
for i in 1..b
9414+
loop
9415+
r := nested_trace_test(r);
9416+
end loop;
9417+
return r;
9418+
end;
9419+
$$ language plpgsql;
9420+
-- when plpgsql_check is not loaded yet, then plpgsql_check is
9421+
-- load by perform plpgsql_check_pragma and this is another
9422+
-- case, when fmgr hook is not called in expected order.
9423+
\c
9424+
-- should not to crash
9425+
select trace_test(3);
9426+
WARNING: late initialization of fmgr_plpgsql_cache
9427+
trace_test
9428+
------------
9429+
3
9430+
(1 row)
9431+

expected/plpgsql_check_active_2.out

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9395,3 +9395,34 @@ set plpgsql_check.cursors_leaks to on;
93959395
do $$ declare c cursor for select 1; begin open c; call p1(); end $$;
93969396
set plpgsql_check.cursors_leaks to default;
93979397
drop procedure p1;
9398+
-- should not crash
9399+
create or replace function nested_trace_test(a int)
9400+
returns int as $$
9401+
begin
9402+
perform plpgsql_check_pragma('enable:tracer');
9403+
return a + 1;
9404+
end;
9405+
$$ language plpgsql;
9406+
create or replace function trace_test(b int)
9407+
returns int as $$
9408+
declare r int default 0;
9409+
begin
9410+
for i in 1..b
9411+
loop
9412+
r := nested_trace_test(r);
9413+
end loop;
9414+
return r;
9415+
end;
9416+
$$ language plpgsql;
9417+
-- when plpgsql_check is not loaded yet, then plpgsql_check is
9418+
-- load by perform plpgsql_check_pragma and this is another
9419+
-- case, when fmgr hook is not called in expected order.
9420+
\c
9421+
-- should not to crash
9422+
select trace_test(3);
9423+
WARNING: late initialization of fmgr_plpgsql_cache
9424+
trace_test
9425+
------------
9426+
3
9427+
(1 row)
9428+

0 commit comments

Comments
 (0)