]> git.tuebingen.mpg.de Git - paraslash.git/blobdiff - aft.c
Keep the audio file open when mmapping.
[paraslash.git] / aft.c
diff --git a/aft.c b/aft.c
index 5bedc9281b4f23872ac329e01cce16452d786cc3..3d10ced25949d61e370eae617950dd7ff316b7e6 100644 (file)
--- a/aft.c
+++ b/aft.c
@@ -1740,7 +1740,7 @@ static int get_row_pointer_from_result(struct osl_object *result, void *private)
 
 static int add_one_audio_file(const char *path, void *private_data)
 {
-       int ret, send_ret = 1;
+       int ret, send_ret = 1, fd;
        uint8_t format_num = -1;
        struct private_add_data *pad = private_data;
        struct afh_info afhi, *afhi_ptr = NULL;
@@ -1764,7 +1764,7 @@ static int add_one_audio_file(const char *path, void *private_data)
                goto out_free;
        }
        /* We still want to add this file. Compute its hash. */
-       ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, NULL);
+       ret = mmap_full_file(path, O_RDONLY, &map.data, &map.size, &fd);
        if (ret < 0)
                goto out_free;
        hash_function(map.data, map.size, hash);
@@ -1789,7 +1789,7 @@ static int add_one_audio_file(const char *path, void *private_data)
         * there is a hash sister and FORCE was not given.
         */
        if (!hs || (pad->flags & ADD_FLAG_FORCE)) {
-               ret = compute_afhi(path, map.data, map.size, &afhi);
+               ret = compute_afhi(path, map.data, map.size, fd, &afhi);
                if (ret < 0)
                        goto out_unmap;
                format_num = ret;
@@ -1807,6 +1807,7 @@ static int add_one_audio_file(const char *path, void *private_data)
        goto out_free;
 
 out_unmap:
+       close(fd);
        munmap(map.data, map.size);
 out_free:
        if (ret < 0 && send_ret >= 0)