diff options
author | Alexander Larsson <alexl@redhat.com> | 2015-09-09 16:25:51 +0200 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2015-09-09 16:25:51 +0200 |
commit | 4ca4f78483002674897f0277685327afd38e8431 (patch) | |
tree | 8040a216aab6e02dd4183d78a84062240e4ff22f /document-portal | |
parent | 6abfb68faf6c4b71828a322f8bb1581d20978745 (diff) | |
download | xdg-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.
Diffstat (limited to 'document-portal')
-rw-r--r-- | document-portal/xdp-fuse.c | 17 |
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); |