overwriting an existing .so while being used crashes the server process

Поиск
Список
Период
Сортировка
От Tomas Vondra
Тема overwriting an existing .so while being used crashes the server process
Дата
Msg-id 4FC6833C.6080501@fuzzy.cz
обсуждение исходный текст
Ответы Re: overwriting an existing .so while being used crashes the server process
Список pgsql-bugs
Hi,

whenever I run a C-function (part of an .so file) and the file is
overwritten, the connection crashes. Tested on 9.1.3 and 9.2-beta1.

It's 100% reproducible:

 1) compile the attached file and copy the .so to pkglibdir

    $ gcc -I/home/tomas/tmp/postgresql-9.1.2/src/include testcomp.c
          -shared -fPIC -o testcomp.so

    $ cp testcomp.so `pg_config --pkglibdir`

 2) create a function, calling the .so

    CREATE FUNCTION test_computation()
           RETURNS void
           AS 'testcomp','test_computation'
           LANGUAGE C STRICT;

 3) call the function and while it's running, repeat step (1).

 4) an example of the output

    WARNING:  i = 532000000 v = 141512000266000000
    WARNING:  i = 533000000 v = 142044500266500000
    WARNING:  i = 534000000 v = 142578000267000000
    The connection to the server was lost. Attempting reset: Failed.

    and a log says this

    LOG:  server process (PID 17161) was terminated by signal 7: Bus
          error
    LOG:  terminating any other active server processes
    WARNING:  terminating connection because of crash of another server
              process
    ...

This does not happen when the .so is removed or just touched, it needs
to be overwritten (although with a file that's binary exactly the same).

Basic info about the box: Linux rimmer 3.3.2-gentoo #1 SMP PREEMPT Wed
Apr 18 14:54:04 CEST 2012 x86_64 Intel(R) Core(TM) i5-2500K CPU @
3.30GHz GenuineIntel GNU/Linux

kind regards
Tomas

Вложения

В списке pgsql-bugs по дате отправления:

Предыдущее
От: "Tomas Vondra"
Дата:
Сообщение: Re: BUG #6667: diplom on english language on your site
Следующее
От: Tom Lane
Дата:
Сообщение: Re: overwriting an existing .so while being used crashes the server process