Re: [Tracker] tracker on solaris



Jamie McCracken wrote:
Jedy Wang wrote:
Hi Jamie,

I built tracker-0.0.4 on Solaris. But when I run trackerd, it will crash
because of segmentation fault and produce a core file. If I run pstack
core, it outpus:

-bash-3.00$ pstack core
core 'core' of 2452:    trackerd
 fe9b19b3 mutex_lock_impl (0, 0) + 23
 fe9b1baf mutex_lock (0) + 1d
 08176e59 do_cleanup (804753c, fe9b86cf, b, 0, 80475d0, 8047594) + 29
 081775ad signal_handler (b, 0, 80475d0) + 4d
 fe9b86cf __sighndlr (b, 0, 80475d0, 8177560) + f
 fe9ae420 call_user_handler (b, 0, 80475d0) + 247
 fe9ae5a8 sigacthandler (b, 0, 80475d0) + bc
 --- called from signal handler with signal 11 (SIGSEGV) ---
 081b9c66 handle_options (8047a4c, 8047a50, 8508c94, 819c4c0) + 76
 0819d2c9 __1cLget_options6Fippc_v_ (1, 85fd5b4) + 49
 0819adfa __1cVinit_common_variables6Fpkcippcp1_i_ (84766bc, c, 85fd5b0,
8508508) + 16a
 0819e9ad init_embedded_server (c, 85ea838, 8508508) + 8d
 08191017 mysql_server_init (c, 85ea838, 8508508) + 127
 081793e3 main     (1, 8047c20, 8047c28) + 563
 08176a6a _start   (1, 8047cec, 0, 8047cf5, 8047cf9, 8047d09) + 7a


It's crashing in the embedded mysql server. Do you have the embedded server working correctly on Solaris with anything else?

It also seems to crashing when handling the passed options (handle_options)

The trackerd code for calling mysql_server_init is:

        static char **server_options;
static char *server_groups[] = {"libmysqd_server", "libmysqd_client", NULL};

        /* initialise embedded mysql with options*/
        server_options = g_new (char *, 12);
        server_options[0] = g_strdup ("anything");
        server_options[1] = g_strconcat  ("--datadir=", tracker_data_dir, NULL);
        server_options[2] = g_strdup ("--myisam-recover=FORCE");
        server_options[3] = g_strdup ("--skip-grant-tables");
        server_options[4] = g_strdup ("--skip-innodb");
        server_options[5] = g_strdup ("--key_buffer_size=1M");
        server_options[6] = g_strdup ("--character-set-server=utf8");
        server_options[7] = g_strdup ("--ft_max_word_len=45");
        server_options[8] = g_strdup ("--ft_min_word_len=3");
server_options[9] = g_strdup ("--ft_stopword_file=" DATADIR "/tracker/tracker-stop-words.txt");
        server_options[10] =  g_strconcat ("--language=", str,  NULL);
        server_options[11] = NULL;

        mysql_server_init ( 11, server_options, server_groups);


I dont know if mysql on solaris is sensitive to the server_options array being null terminated which it does not need to be as mysql_server_init needs to know the size of the array (11).

You might want to experiment with changing the above code in trackerd.c

try:
server_options = g_new (char *, 11);

and remove line : server_options[11] = NULL;

(if its not null terminated then you will also have to remove the g_strfreev (server_options) after it otherwise that bit will crash)


--
Mr Jamie McCracken
http://jamiemcc.livejournal.com/




[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]