summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2015-09-09 16:25:51 +0200
committerAlexander Larsson <alexl@redhat.com>2015-09-09 16:25:51 +0200
commit4ca4f78483002674897f0277685327afd38e8431 (patch)
tree8040a216aab6e02dd4183d78a84062240e4ff22f
parent6abfb68faf6c4b71828a322f8bb1581d20978745 (diff)
downloadxdg-app-4ca4f78483002674897f0277685327afd38e8431.tar.gz
document portal: Fix crashes when dbus activated
We handle the first message (the activating message) before we have gotten the name aquired message. Make sure that this is correctly handled.
-rw-r--r--document-portal/xdp-fuse.c17
1 files changed, 15 insertions, 2 deletions
diff --git a/document-portal/xdp-fuse.c b/document-portal/xdp-fuse.c
index d806293..547cee9 100644
--- a/document-portal/xdp-fuse.c
+++ b/document-portal/xdp-fuse.c
@@ -2096,6 +2096,11 @@ xdp_fuse_invalidate_doc_app (const char *doc_id_s,
g_debug ("invalidate %s/%s\n", doc_id_s, app_id_s);
+ /* This can happen if fuse is not initialized yet for the very
+ first dbus message that activated the service */
+ if (main_ch == NULL)
+ return;
+
fuse_lowlevel_notify_inval_inode (main_ch, make_app_doc_file_inode (app_id, doc_id), 0, 0);
fuse_lowlevel_notify_inval_entry (main_ch, make_app_doc_dir_inode (app_id, doc_id),
basename, strlen (basename));
@@ -2114,6 +2119,11 @@ xdp_fuse_invalidate_doc (const char *doc_id_s,
g_debug ("invalidate %s\n", doc_id_s);
+ /* This can happen if fuse is not initialized yet for the very
+ first dbus message that activated the service */
+ if (main_ch == NULL)
+ return;
+
fuse_lowlevel_notify_inval_inode (main_ch, make_app_doc_file_inode (0, doc_id), 0, 0);
fuse_lowlevel_notify_inval_entry (main_ch, make_app_doc_dir_inode (0, doc_id),
basename, strlen (basename));
@@ -2136,6 +2146,8 @@ xdp_fuse_lookup_id_for_inode (ino_t inode)
const char *
xdp_fuse_get_mountpoint (void)
{
+ if (mount_path == NULL)
+ mount_path = g_build_filename (g_get_user_runtime_dir(), "doc", NULL);
return mount_path;
}
@@ -2171,17 +2183,18 @@ xdp_fuse_init (GError **error)
char *argv[] = { "xdp-fuse", "-osplice_write,splice_move,splice_read" };
struct fuse_args args = FUSE_ARGS_INIT(G_N_ELEMENTS(argv), argv);
struct stat st;
+ const char *mount_path;
app_name_to_id =
g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
app_id_to_name =
g_hash_table_new_full (g_direct_hash, g_direct_equal, NULL, NULL);
- mount_path = g_build_filename (g_get_user_runtime_dir(), "doc", NULL);
+ mount_path = xdp_fuse_get_mountpoint ();
if (stat (mount_path, &st) == -1 && errno == ENOTCONN)
{
- char *argv[] = { "fusermount", "-u", mount_path, NULL };
+ char *argv[] = { "fusermount", "-u", (char *)mount_path, NULL };
g_spawn_sync (NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
NULL, NULL, NULL, NULL, NULL, NULL);