次の行で関数を呼び出しています。
void call_system_command(const char *command_params)
{
GString *cmd = g_string_sized_new(1024);
g_string_append_printf(cmd, "/bin/bash /path/to/my/script '%s'", command_params);
system(cmd->str);
g_string_free(cmd, TRUE);
}
g_string_sized_new の行で segfault が発生しています。gdb からのバックトレース:
(gdb) bt
#0 0x000000320ce56264 in g_slice_alloc () from /lib64/libglib-2.0.so.0
#1 0x000000320ce5c3db in g_string_sized_new () from /lib64/libglib-2.0.so.0
....
G_SLICE=always-malloc をエクスポートしてみたので、glib 独自のアロケーターの代わりに malloc が使用されます。ただし、問題は同じままです。g_slice_alloc でまだ segfault が発生しています。また、この関数「call_system_command」を複数のスレッドから呼び出しています。それは問題になるでしょうか?
この関数は、15 分ごとに cron によって呼び出されるプラグインの一部です。segfault は、プラグインが実行されるたびに発生するのではなく、3 ~ 4 日ごとに発生します。
さらにデバッグするための指針は役に立ちます。
前もって感謝します。