[BUGS] Beta4 postgres.exe crash "...terminated by signal 5" -
11-16-2004
, 02:14 PM
This is a multi-part message in MIME format.
------=_NextPart_000_417c_7ef1_dd8
Content-Type: text/plain; format=flowed
Greetings.
I am very new to PostgreSQL so apologies in advance if this bug report is a
waste of time for some reason.
Summary:
I have been experimenting with 8.0 Beta4 on Windows XP and the attached SQL
resulted in a crash of the database (not the postmaster as far as I can
tell). My code creates a function, then another function to test it. Then
the test function is executed. During the execution of the test function the
process crashes.
Version:
PostgreSQL 8.0.0beta4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC)
3.3.1 (mingw special 20030804-1)
OS: Windows XP SP1
Recreating the problem:
Create a database and run the attached script against it using psql.
Observed Outcome:
postgres.exe crashes. See log file extract below.
Expected Outcome:
Either the tests should run to completion or an exception should be raised
(in the likely event that my syntax or logic is flawed).
FYI I have implemented my logic in a new way, so I don't need a fix, but
thought I'd pass on the details all the same.
Best Regards,
- John.
pg_log Extract
=========
2004-11-16 08:58:41 NOTICE: 00000: PASS: / did not raise an exception
2004-11-16 08:58:41 LOCATION: exec_stmt_raise, pl_exec.c:1968
2004-11-16 08:58:41 NOTICE: 00000: PASS: /topdir did not raise an exception
2004-11-16 08:58:41 LOCATION: exec_stmt_raise, pl_exec.c:1968
2004-11-16 08:58:41 NOTICE: 00000: PASS: /topdir/subdir did not raise an
exception
2004-11-16 08:58:41 LOCATION: exec_stmt_raise, pl_exec.c:1968
2004-11-16 08:58:41 NOTICE: 00000: PASS: /topdir/subdir/subsubdir did not
raise an exception
2004-11-16 08:58:41 LOCATION: exec_stmt_raise, pl_exec.c:1968
2004-11-16 08:58:41 NOTICE: 00000: FAIL: should have been identified as an
invalid path
2004-11-16 08:58:41 LOCATION: exec_stmt_raise, pl_exec.c:1968
2004-11-16 08:58:41 NOTICE: 00000: PASS: // did raise an exception
2004-11-16 08:58:41 LOCATION: exec_stmt_raise, pl_exec.c:1968
2004-11-16 08:58:47 LOG: 00000: server process (PID 3652) was terminated by
signal 5
2004-11-16 08:58:47 LOCATION: LogChildExit, postmaster.c:2282
2004-11-16 08:58:47 LOG: 00000: terminating any other active server
processes
2004-11-16 08:58:47 LOCATION: HandleChildCrash, postmaster.c:2175
2004-11-16 08:58:47 LOG: 00000: all server processes terminated;
reinitializing
2004-11-16 08:58:47 LOCATION: reaper, postmaster.c:2074
2004-11-16 08:58:47 LOG: 00000: database system was interrupted at
2004-11-15 17:43:17 GMT Standard Time
2004-11-16 08:58:47 LOCATION: StartupXLOG, xlog.c:4026
2004-11-16 08:58:47 LOG: 00000: checkpoint record is at 0/4EA3158
2004-11-16 08:58:47 LOCATION: StartupXLOG, xlog.c:4095
2004-11-16 08:58:47 LOG: 00000: redo record is at 0/4EA3158; undo record is
at 0/0; shutdown FALSE
2004-11-16 08:58:47 LOCATION: StartupXLOG, xlog.c:4123
2004-11-16 08:58:47 LOG: 00000: next transaction ID: 26681; next OID:
135172
2004-11-16 08:58:47 LOCATION: StartupXLOG, xlog.c:4126
2004-11-16 08:58:47 LOG: 00000: database system was not properly shut down;
automatic recovery in progress
2004-11-16 08:58:47 LOCATION: StartupXLOG, xlog.c:4182
2004-11-16 08:58:47 LOG: 00000: redo starts at 0/4EA3198
2004-11-16 08:58:47 LOCATION: StartupXLOG, xlog.c:4219
2004-11-16 08:58:47 WARNING: 01000: could not remove database directory
"C:/Program Files/PostgreSQL/8.0.0-beta4/data/base/128288"
2004-11-16 08:58:47 LOCATION: dbase_redo, dbcommands.c:1214
2004-11-16 08:58:48 LOG: 00000: record with zero length at 0/4EB9F38
2004-11-16 08:58:48 LOCATION: ReadRecord, xlog.c:2459
2004-11-16 08:58:48 LOG: 00000: redo done at 0/4EB9F08
2004-11-16 08:58:48 LOCATION: StartupXLOG, xlog.c:4277
2004-11-16 08:58:49 LOG: 00000: database system is ready
2004-11-16 08:58:49 LOCATION: StartupXLOG, xlog.c:4489
__________________________________________________ _______________
Don't just search. Find. Check out the new MSN Search!
http://search.msn.com/
------=_NextPart_000_417c_7ef1_dd8
Content-Type: text/plain; name="recreate_crash.sql"; format=flowed
Content-Transfer-Encoding: 8bit
Content-Disposition: attachment; filename="recreate_crash.sql"
/* Function */
CREATE OR REPLACE FUNCTION dss_check_path(dss_path varchar)
RETURNS void AS
$BODY$
BEGIN
--test for empty directory names
IF dss_path LIKE '%//%' THEN
RAISE EXCEPTION '% contains an empty directory name', dss_path;
END IF;
--test if last directory is empty name
IF dss_path LIKE '%/' AND dss_path <> '/' THEN
RAISE EXCEPTION '% ends with an empty directory name', dss_path;
END IF;
--TODO: Check for invalid characters, trailing spaces, etc....
RETURN;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
/* Test Function */
CREATE OR REPLACE FUNCTION test_dss_clean_path()
RETURNS int4 AS
$BODY$
DECLARE
valid_paths varchar[];
invalid_paths varchar[];
current_index int4 = 1;
current_path varchar;
max_index int4;
error_count int4 := 0;
test_count int4 := 0;
input varchar;
BEGIN
valid_paths := ARRAY['/',
'/topdir',
'/topdir/subdir',
'/topdir/subdir/subsubdir'];
invalid_paths := ARRAY['',
'//',
'//topdir',
'///',
'/topdir/',
'/topdir/subdir/',
'/topdir/subdir/subsubdir/'];
/* Test valid paths: should not raise an exception */
max_index := array_upper(valid_paths, 1);
current_index := 1;
BEGIN
WHILE current_index <= max_index LOOP
current_path := valid_paths[current_index];
PERFORM dss_check_path(current_path);
--exception not expected
RAISE NOTICE 'PASS: % did not raise an exception', current_path;
current_index := current_index + 1;
test_count := test_count + 1;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
RAISE NOTICE 'FAIL: % should not have been identified as being an invalid
path', current_path;
error_count := error_count + 1;
END;
/* Test invalid paths: should raise an exception */
max_index := array_upper(invalid_paths, 1);
current_index := 1;
WHILE current_index <= max_index LOOP
BEGIN
current_path := invalid_paths[current_index];
PERFORM dss_check_path(current_path);
RAISE NOTICE 'FAIL: % should have been identified as an invalid path',
current_path;
error_count := error_count + 1;
EXCEPTION
WHEN OTHERS THEN
--exception expected
RAISE NOTICE 'PASS: % did raise an exception', current_path;
END;
current_index := current_index + 1;
test_count := test_count + 1;
END LOOP;
IF error_count = 0 THEN
RAISE NOTICE 'SUCCESS: All % tests passed', test_count;
ELSE
RAISE NOTICE 'FAILURE: % out of % tests failed', error_count, test_count;
END IF;
RETURN error_count;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
/* Call Test Function */
SELECT test_dss_clean_path();
/* Drop Test Function */
DROP FUNCTION test_dss_clean_path();
------=_NextPart_000_417c_7ef1_dd8
Content-Type: text/plain
Content-Disposition: inline
Content-Transfer-Encoding: 8bit
MIME-Version: 1.0
---------------------------(end of broadcast)---------------------------
TIP 7: don't forget to increase your free space map settings
------=_NextPart_000_417c_7ef1_dd8-- |