Index: sysprof-1.0.9/sysprof.c =================================================================== --- sysprof-1.0.9.orig/sysprof.c +++ sysprof-1.0.9/sysprof.c @@ -543,32 +543,67 @@ on_start_toggled (GtkWidget *widget, gpo if (app->input_fd == -1) { - int fd; - fd = open ("/proc/sysprof-trace", O_RDONLY); - if (fd < 0) - { - load_module(); - - fd = open ("/proc/sysprof-trace", O_RDONLY); - - if (fd < 0) - { - sorry (app->main_window, - "Can't open /proc/sysprof-trace. You need to insert\n" - "the sysprof kernel module. Run\n" - "\n" - " modprobe sysprof-module\n" - "\n" - "as root."); - - update_sensitivity (app); - return; - } - } + // Check for kernel module existence + gchar * modules_path; + gchar * standard_output; + gchar * standard_error; + int exit_status = -1; + if (g_spawn_command_line_sync ("/bin/uname -r", + &standard_output, &standard_error, + &exit_status, + NULL)) + { + g_strchomp( standard_output ); + gchar * module_path; + module_path = g_strdup_printf( "/lib/modules/%s/extra/sysprof-module.ko", standard_output ); + + if ( ! g_file_test( module_path, G_FILE_TEST_EXISTS )) + { + sorry (app->main_window, + "Can not find sysprof kernel module in:\n\n" + " %s\n\n" + "Please see:\n" + "\n" + " %s/README.Fedora\n" + "\n" + "for more info about module installation.", module_path, PACKAGE_DOCDIR ); + g_free( module_path ); + update_sensitivity (app); + return; + + } + g_free (standard_output); + g_free (standard_error); + g_free( module_path ); + } + + int fd; + + fd = open ("/proc/sysprof-trace", O_RDONLY); + if (fd < 0) + { + load_module(); + + fd = open ("/proc/sysprof-trace", O_RDONLY); + + if (fd < 0) + { + sorry (app->main_window, + "Can't open /proc/sysprof-trace. You need to insert\n" + "the sysprof kernel module. Run\n" + "\n" + " modprobe sysprof-module\n" + "\n" + "as root."); + + update_sensitivity (app); + return; + } + } - app->input_fd = fd; - fd_add_watch (app->input_fd, app); + app->input_fd = fd; + fd_add_watch (app->input_fd, app); } fd_set_read_callback (app->input_fd, on_read);