Browse Source

initialize mutex to fix lockup

pull/662/head
Antonio SJ Musumeci 5 years ago
parent
commit
50ad648ce4
  1. 4
      libfuse/lib/buffer.c
  2. 4
      libfuse/lib/fuse.c
  3. 7
      src/policy_cache.cpp

4
libfuse/lib/buffer.c

@ -229,8 +229,8 @@ static ssize_t fuse_buf_copy_one(const struct fuse_buf *dst, size_t dst_off,
int dst_is_fd = dst->flags & FUSE_BUF_IS_FD;
if (!src_is_fd && !dst_is_fd) {
void *dstmem = dst->mem + dst_off;
void *srcmem = src->mem + src_off;
char *dstmem = dst->mem + dst_off;
char *srcmem = src->mem + src_off;
if (dstmem != srcmem) {
if (dstmem + len <= srcmem || srcmem + len <= dstmem)

4
libfuse/lib/fuse.c

@ -2638,6 +2638,7 @@ static void fuse_lib_getattr(fuse_req_t req, fuse_ino_t ino,
memset(&buf, 0, sizeof(buf));
path = NULL;
err = (((fi == NULL) || (f->fs->op.fgetattr == NULL)) ?
get_path(f,ino,&path) :
get_path_nullok(f,ino,&path));
@ -2711,9 +2712,10 @@ static void fuse_lib_setattr(fuse_req_t req, fuse_ino_t ino, struct stat *attr,
memset(&buf, 0, sizeof(buf));
path = NULL;
err = ((fi == NULL) ?
get_path(f,ino,&path) :
get_path_nullok(f, ino, &path));
get_path_nullok(f,ino,&path));
if (!err) {
struct fuse_intr_data d;

7
src/policy_cache.cpp

@ -38,11 +38,15 @@ PolicyCache::Value::Value()
PolicyCache::PolicyCache(void)
: timeout(DEFAULT_TIMEOUT)
{
pthread_mutex_init(&_lock,NULL);
}
void
PolicyCache::erase(const char *fusepath_)
{
if(timeout == 0)
return;
pthread_mutex_lock(&_lock);
_cache.erase(fusepath_);
@ -56,6 +60,9 @@ PolicyCache::cleanup(const int prob_)
uint64_t now;
map<string,Value>::iterator i;
if(timeout == 0)
return;
if(rand() % prob_)
return;

Loading…
Cancel
Save