#include <string.h>
#include <sys/types.h> /* uid_t, gid_t */
-#ifdef WITH_FUSE
-# include <pthread.h>
-#endif
-
struct wim_lookup_table;
struct wim_lookup_table_entry;
struct wimfs_fd;
u16 i_num_opened_fds;
u16 i_num_allocated_fds;
struct wimfs_fd **i_fds;
- /* This mutex protects the inode's file descriptors table during
- * read-only mounts. Read-write mounts are still restricted to 1
- * thread. */
- pthread_mutex_t i_mutex;
#endif
};
inode->i_next_stream_id = 1;
inode->i_not_rpfixed = 1;
INIT_LIST_HEAD(&inode->i_list);
- #ifdef WITH_FUSE
- if (pthread_mutex_init(&inode->i_mutex, NULL) != 0) {
- ERROR_WITH_ERRNO("Error initializing mutex");
- FREE(inode);
- return NULL;
- }
- #endif
INIT_LIST_HEAD(&inode->i_dentry);
}
return inode;
#ifdef WITH_FUSE
wimlib_assert(inode->i_num_opened_fds == 0);
FREE(inode->i_fds);
- pthread_mutex_destroy(&inode->i_mutex);
#endif
/* HACK: This may instead delete the inode from i_list, but the
* hlist_del() behaves the same as list_del(). */
static const u16 max_fds = 0xffff;
int ret;
- pthread_mutex_lock(&inode->i_mutex);
-
DEBUG("Allocating fd for stream ID %u from inode %#"PRIx64" "
"(open = %u, allocated = %u)",
stream_id, inode->i_ino, inode->i_num_opened_fds,
}
}
out:
- pthread_mutex_unlock(&inode->i_mutex);
return ret;
}
inode_put_fd(struct wim_inode *inode, struct wimfs_fd *fd)
{
wimlib_assert(inode != NULL);
-
- pthread_mutex_lock(&inode->i_mutex);
-
wimlib_assert(fd->f_inode == inode);
wimlib_assert(inode->i_num_opened_fds != 0);
wimlib_assert(fd->idx < inode->i_num_allocated_fds);
inode->i_fds[fd->idx] = NULL;
FREE(fd);
- if (--inode->i_num_opened_fds == 0 && inode->i_nlink == 0) {
- pthread_mutex_unlock(&inode->i_mutex);
+ if (--inode->i_num_opened_fds == 0 && inode->i_nlink == 0)
free_inode(inode);
- } else {
- pthread_mutex_unlock(&inode->i_mutex);
- }
}
static int
goto out_free_message_queue_names;
argc = 0;
- argv[argc++] = "imagex";
+ argv[argc++] = IMAGEX_PROGNAME;
argv[argc++] = dir_copy;
- /* disable multi-threaded operation for read-write mounts */
- if (mount_flags & WIMLIB_MOUNT_FLAG_READWRITE)
- argv[argc++] = "-s";
+ /* disable multi-threaded operation */
+ argv[argc++] = "-s";
if (mount_flags & WIMLIB_MOUNT_FLAG_DEBUG)
argv[argc++] = "-d";