Currently, sheep could call a callback function against tmp objects.
This fixes the problem.

Signed-off-by: MORITA Kazutaka <[email protected]>
---
 sheep/plain_store.c |   10 ++++++++++
 1 files changed, 10 insertions(+), 0 deletions(-)

diff --git a/sheep/plain_store.c b/sheep/plain_store.c
index 8888521..0129d54 100644
--- a/sheep/plain_store.c
+++ b/sheep/plain_store.c
@@ -53,6 +53,7 @@ int for_each_object_in_wd(int (*func)(uint64_t oid))
        struct dirent *d;
        uint64_t oid;
        int ret = SD_RES_SUCCESS;
+       char path[PATH_MAX];
 
        dir = opendir(obj_path);
        if (!dir)
@@ -66,6 +67,15 @@ int for_each_object_in_wd(int (*func)(uint64_t oid))
                if (oid == 0 || oid == ULLONG_MAX)
                        continue;
 
+               /* remove object if it is temporary one */
+               if (strlen(d->d_name) == 20 &&
+                   strcmp(d->d_name + 16, ".tmp") == 0) {
+                       get_tmp_obj_path(oid, path);
+                       dprintf("remove tmp object %s\n", path);
+                       unlink(path);
+                       continue;
+               }
+
                ret = func(oid);
                if (ret != SD_RES_SUCCESS)
                        break;
-- 
1.7.2.5

-- 
sheepdog mailing list
[email protected]
http://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to