[Pkg-owncloud-commits] [owncloud-client] 09/47: remove csync_lock

Sandro Knauß hefee-guest at moszumanska.debian.org
Mon Feb 17 18:06:32 UTC 2014


This is an automated email from the git hooks/post-receive script.

hefee-guest pushed a commit to branch master
in repository owncloud-client.

commit ee3df45fd83c6e9903aafbe8a15badf84184d338
Author: Olivier Goffart <ogoffart at woboq.com>
Date:   Wed Feb 5 17:09:33 2014 +0100

    remove csync_lock
    
    It is not used anymore for a long time
---
 csync/src/CMakeLists.txt                   |   1 -
 csync/src/csync.c                          |  47 +-----
 csync/src/csync.h                          |   7 +-
 csync/src/csync_exclude.c                  |   5 -
 csync/src/csync_lock.c                     | 236 -----------------------------
 csync/src/csync_lock.h                     |  66 --------
 csync/tests/CMakeLists.txt                 |   4 -
 csync/tests/csync_tests/check_csync_lock.c |  94 ------------
 8 files changed, 5 insertions(+), 455 deletions(-)

diff --git a/csync/src/CMakeLists.txt b/csync/src/CMakeLists.txt
index cbe921c..db69899 100644
--- a/csync/src/CMakeLists.txt
+++ b/csync/src/CMakeLists.txt
@@ -61,7 +61,6 @@ set(csync_SRCS
   csync_time.c
   csync_util.c
   csync_misc.c
-  csync_lock.c
 
   csync_update.c
   csync_reconcile.c
diff --git a/csync/src/csync.c b/csync/src/csync.c
index 350bca8..935f96c 100644
--- a/csync/src/csync.c
+++ b/csync/src/csync.c
@@ -43,7 +43,6 @@
 #include "c_lib.h"
 #include "csync_private.h"
 #include "csync_exclude.h"
-#include "csync_lock.h"
 #include "csync_statedb.h"
 #include "csync_time.h"
 #include "csync_util.h"
@@ -168,7 +167,6 @@ int csync_create(CSYNC **csync, const char *local, const char *remote) {
 int csync_init(CSYNC *ctx) {
   int rc;
   time_t timediff = -1;
-  char *lock = NULL;
   char *config = NULL;
 
   if (ctx == NULL) {
@@ -183,19 +181,6 @@ int csync_init(CSYNC *ctx) {
     return 1;
   }
 
-  /* create lock file */
-  if (asprintf(&lock, "%s/%s", ctx->local.uri, CSYNC_LOCK_FILE) < 0) {
-    rc = -1;
-    ctx->status_code = CSYNC_STATUS_MEMORY_ERROR;
-    goto out;
-  }
-
-  if (csync_lock(lock) < 0) {
-    rc = -1;
-    ctx->status_code = CSYNC_STATUS_NO_LOCK;
-    goto out;
-  }
-
   ctx->local.type = LOCAL_REPLICA;
 
   /* check for uri */
@@ -286,8 +271,6 @@ retry_vio_init:
 
   ctx->status = CSYNC_STATUS_INIT;
 
-  csync_lock_remove(lock);
-
   csync_set_module_property(ctx, "csync_context", ctx);
 
   /* initialize random generator */
@@ -296,7 +279,6 @@ retry_vio_init:
   rc = 0;
 
 out:
-  SAFE_FREE(lock);
   SAFE_FREE(config);
   return rc;
 }
@@ -304,7 +286,6 @@ out:
 int csync_update(CSYNC *ctx) {
   int rc = -1;
   struct timespec start, finish;
-  char *lock = NULL;
 
   if (ctx == NULL) {
     errno = EBADF;
@@ -312,21 +293,6 @@ int csync_update(CSYNC *ctx) {
   }
   ctx->status_code = CSYNC_STATUS_OK;
 
-  /* try to create lock file */
-  if (asprintf(&lock, "%s/%s", ctx->local.uri, CSYNC_LOCK_FILE) < 0) {
-    ctx->status_code = CSYNC_STATUS_MEMORY_ERROR;
-    rc = -1;
-    return rc;
-  }
-
-  if (csync_lock(lock) < 0) {
-    ctx->status_code = CSYNC_STATUS_NO_LOCK;
-    rc = -1;
-    return rc;
-  }
-
-  SAFE_FREE(lock);
-
   /* create/load statedb */
   if (! csync_is_statedb_disabled(ctx)) {
     rc = asprintf(&ctx->statedb.file, "%s/.csync_journal.db",
@@ -698,8 +664,7 @@ out:
 }
 
 int csync_destroy(CSYNC *ctx) {
-  char *lock = NULL;
-  int rc;
+  int rc = 0;
 
   if (ctx == NULL) {
     errno = EBADF;
@@ -719,12 +684,6 @@ int csync_destroy(CSYNC *ctx) {
   /* destroy exclude list */
   csync_exclude_destroy(ctx);
 
-  /* remove the lock file */
-  rc = asprintf(&lock, "%s/%s", ctx->options.config_dir, CSYNC_LOCK_FILE);
-  if (rc > 0) {
-    csync_lock_remove(lock);
-  }
-
   _csync_clean_ctx(ctx);
 
   SAFE_FREE(ctx->local.uri);
@@ -738,9 +697,7 @@ int csync_destroy(CSYNC *ctx) {
 
   SAFE_FREE(ctx);
 
-  SAFE_FREE(lock);
-
-  return 0;
+  return rc;
 }
 
 /* Check if csync is the required version or get the version string. */
diff --git a/csync/src/csync.h b/csync/src/csync.h
index 5a903b3..d540795 100644
--- a/csync/src/csync.h
+++ b/csync/src/csync.h
@@ -50,7 +50,6 @@ extern "C" {
 #define CSYNC_CONF_DIR ".ocsync"
 #define CSYNC_CONF_FILE "ocsync.conf"
 #define CSYNC_EXCLUDE_FILE "ocsync_exclude.conf"
-#define CSYNC_LOCK_FILE ".csync.lock"
 
 /**
   * Instruction enum. In the file traversal structure, it describes
@@ -62,7 +61,7 @@ enum csync_status_codes_e {
   CSYNC_STATUS_ERROR      = 1024, /* don't use this code,
                                      just use in csync_status_ok */
   CSYNC_STATUS_UNSUCCESSFUL,
-  CSYNC_STATUS_NO_LOCK,
+  CSYNC_STATUS_NO_LOCK, /* OBSOLETE  does not happen anymore */
   CSYNC_STATUS_STATEDB_LOAD_ERROR,
   CSYNC_STATUS_STATEDB_WRITE_ERROR,
   CSYNC_STATUS_NO_MODULE,
@@ -242,7 +241,7 @@ int csync_create(CSYNC **csync, const char *local, const char *remote);
 /**
  * @brief Initialize the file synchronizer.
  *
- * This function loads the configuration, the statedb and locks the client.
+ * This function loads the configuration
  *
  * @param ctx  The context to initialize.
  *
@@ -289,7 +288,7 @@ int csync_commit(CSYNC *ctx);
 /**
  * @brief Destroy the csync context
  *
- * Writes the statedb, unlocks csync and frees the memory.
+ * frees the memory.
  *
  * @param ctx  The context to destroy.
  *
diff --git a/csync/src/csync_exclude.c b/csync/src/csync_exclude.c
index 68a6d61..4378be5 100644
--- a/csync/src/csync_exclude.c
+++ b/csync/src/csync_exclude.c
@@ -148,11 +148,6 @@ CSYNC_EXCLUDE_TYPE csync_excluded(CSYNC *ctx, const char *path, int filetype) {
   CSYNC_EXCLUDE_TYPE match = CSYNC_NOT_EXCLUDED;
   CSYNC_EXCLUDE_TYPE type  = CSYNC_NOT_EXCLUDED;
 
-  /* exclude the lock file */
-  if (c_streq( path, CSYNC_LOCK_FILE )) {
-      return CSYNC_FILE_SILENTLY_EXCLUDED;
-  }
-
   if (! ctx->options.unix_extensions) {
     for (p = path; *p; p++) {
       switch (*p) {
diff --git a/csync/src/csync_lock.c b/csync/src/csync_lock.c
deleted file mode 100644
index 7a45368..0000000
--- a/csync/src/csync_lock.c
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * libcsync -- a library to sync a directory with another
- *
- * Copyright (c) 2008-2013 by Andreas Schneider <asn at cryptomilk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#include "config_csync.h"
-
-#ifndef _GNU_SOURCE
-#define _GNU_SOURCE
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include <errno.h>
-#include <fcntl.h>
-#include <signal.h>
-#include <stdio.h>
-#include <string.h>
-#include <unistd.h>
-
-#include "c_lib.h"
-#include "csync_lock.h"
-#include "csync.h"
-
-#define CSYNC_LOG_CATEGORY_NAME "csync.lock"
-#include "csync_log.h"
-
-#ifdef _DO_CREATE_A_LOCK_FILE
-static int _csync_lock_create(const char *lockfile) {
-  int fd = -1;
-  pid_t pid = 0;
-  int rc = -1;
-  char errbuf[256] = {0};
-  char *ctmpfile = NULL;
-  char *dir = NULL;
-  char *buf = NULL;
-  mode_t mask;
-
-  pid = getpid();
-
-  dir = c_dirname(lockfile);
-  if (dir == NULL) {
-    rc = -1;
-    goto out;
-  }
-
-  if (asprintf(&ctmpfile, "%s/tmp_lock_XXXXXX", dir) < 0) {
-    rc = -1;
-    goto out;
-  }
-
-  CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
-  CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Create temporary lock file: %s", ctmpfile);
-  mask = umask(0077);
-  fd = mkstemp(ctmpfile);
-  umask(mask);
-  if (fd < 0) {
-    strerror_r(errno, errbuf, sizeof(errbuf));
-    CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
-        "Unable to create temporary lock file: %s - %s",
-        ctmpfile,
-        errbuf);
-    rc = -1;
-    goto out;
-  }
-
-  CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Write pid (%d) to temporary lock file: %s", pid, ctmpfile);
-  pid = asprintf(&buf, "%d\n", pid);
-  if (write(fd, buf, pid) == pid) {
-    /* Create lock file */
-    CSYNC_LOG(CSYNC_LOG_PRIORITY_TRACE, "Create a hardlink from %s to %s.", ctmpfile, lockfile);
-    if (link(ctmpfile, lockfile) < 0 ) {
-      /* Oops, alredy locked */
-      strerror_r(errno, errbuf, sizeof(errbuf));
-      CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO,
-          "Already locked: %s - %s",
-          lockfile,
-          errbuf);
-      rc = -1;
-      goto out;
-    }
-  } else {
-    strerror_r(errno, errbuf, sizeof(errbuf));
-    CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
-        "Can't create %s - %s",
-        ctmpfile,
-        errbuf);
-    rc = -1;
-    goto out;
-  }
-
-  rc = 0;
-
-out:
-  if (fd > 0) {
-      close(fd);
-  }
-  if (ctmpfile) {
-      unlink(ctmpfile);
-  }
-
-  SAFE_FREE(buf);
-  SAFE_FREE(dir);
-  SAFE_FREE(ctmpfile);
-
-  return rc;
-}
-
-static pid_t _csync_lock_read(const char *lockfile) {
-  char errbuf[256] = {0};
-  char buf[8] = {0};
-  long int tmp;
-  ssize_t rc;
-  int  fd;
-  pid_t pid;
-  mbchar_t *wlockfile;
-
-  /* Read PID from existing lock */
-#ifdef _WIN32
-  _fmode = _O_BINARY;
-#endif
-
-  wlockfile = c_utf8_to_locale(lockfile);
-  if (wlockfile == NULL) {
-      return -1;
-  }
-
-  fd = _topen(wlockfile, O_RDONLY);
-  c_free_locale_string(wlockfile);
-  if (fd < 0) {
-     return -1;
-  }
-
-  rc = read(fd, buf, sizeof(buf));
-  close(fd);
-
-  if (rc <= 0) {
-     return -1;
-  }
-
-  buf[sizeof(buf) - 1] = '\0';
-  tmp = strtol(buf, NULL, 10);
-  if (tmp == 0 || tmp > 0xFFFF || errno == ERANGE) {
-     /* Broken lock file */
-     strerror_r(ERANGE, errbuf, sizeof(errbuf));
-     if (unlink(lockfile) < 0) {
-       CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
-           "Unable to remove broken lock %s - %s",
-           lockfile,
-           errbuf);
-     }
-     return -1;
-  }
-  pid = (pid_t)(tmp & 0xFFFF);
-
-  /* Check if process is still alive */
-  if (kill(pid, 0) < 0 && errno == ESRCH) {
-    /* Process is dead. Remove stale lock. */
-    wlockfile = c_utf8_to_locale(lockfile);
-
-    if (_tunlink(wlockfile) < 0) {
-      strerror_r(errno, errbuf, sizeof(errbuf));
-      CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
-                "Unable to remove stale lock %s - %s",
-                lockfile,
-                errbuf);
-    }
-    c_free_locale_string(wlockfile);
-    return -1;
-  }
-
-  return pid;
-}
-#endif
-
-int csync_lock(const char *lockfile) {
-#ifdef _DO_CREATE_A_LOCK_FILE /* disable lock file for ownCloud client, not only _WIN32 */
-  /* Check if lock already exists. */
-  if (_csync_lock_read(lockfile) > 0) {
-    CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR, "Aborting, another synchronization process is running.");
-    return -1;
-  }
-
-  CSYNC_LOG(CSYNC_LOG_PRIORITY_INFO, "Creating lock file: %s", lockfile);
-
-  return _csync_lock_create(lockfile);
-#else
-  (void) lockfile;
-  return 0;
-#endif
-
-}
-
-void csync_lock_remove(const char *lockfile) {
-#ifdef _DO_CREATE_A_LOCK_FILE
-#ifndef _WIN32
-  char errbuf[256] = {0};
-  mbchar_t *wlockfile;
-
-  /* You can't remove the lock if it is from another process */
-  if (_csync_lock_read(lockfile) == getpid()) {
-    wlockfile = c_utf8_to_locale(lockfile);
-
-    CSYNC_LOG(CSYNC_LOG_PRIORITY_DEBUG, "Removing lock file: %s", lockfile);
-    if (_tunlink(wlockfile) < 0) {
-      strerror_r(errno, errbuf, sizeof(errbuf));
-      CSYNC_LOG(CSYNC_LOG_PRIORITY_ERROR,
-          "Unable to remove lock %s - %s",
-          lockfile,
-          errbuf);
-    }
-    c_free_locale_string(wlockfile);
-  }
-#endif
-#else
-  (void) lockfile;
-#endif
-
-}
-
diff --git a/csync/src/csync_lock.h b/csync/src/csync_lock.h
deleted file mode 100644
index 9ed4d54..0000000
--- a/csync/src/csync_lock.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
- * libcsync -- a library to sync a directory with another
- *
- * Copyright (c) 2008-2013 by Andreas Schneider <asn at cryptomilk.org>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser General Public
- * License as published by the Free Software Foundation; either
- * version 2.1 of the License, or (at your option) any later version.
- *
- * This library is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- */
-
-#ifndef _CSYNC_LOCK_H
-#define _CSYNC_LOCK_H
-
-#include "csync.h"
-
-/**
- * @file csync_lock.h
- *
- * @brief File locking
- *
- * This prevents csync to start the same synchronization task twice which could
- * lead to several problems.
- *
- * @defgroup csyncLockingInternals csync file lockling internals
- * @ingroup csyncInternalAPI
- *
- * @{
- */
-
-/**
- * @brief Lock the client if possible.
- *
- * This functiion tries to lock the client with a lock file.
- *
- * @param lockfile  The lock file to create.
- *
- * @return  0 if the lock was successfull, less than 0 if the lock file
- *          couldn't be created or if it is already locked.
- */
-int csync_lock(const char *lockfile);
-
-/**
- * @brief  Remove the lockfile
- *
- * Only our own lock can be removed. This function can't remove a lock from
- * another client.
- *
- * @param lockfile  The lock file to remove.
- */
-void csync_lock_remove(const char *lockfile);
-
-/**
- * }@
- */
-#endif /* _CSYNC_LOCK_H */
-/* vim: set ft=c.doxygen ts=8 sw=2 et cindent: */
diff --git a/csync/tests/CMakeLists.txt b/csync/tests/CMakeLists.txt
index 3b9b884..1c364c3 100644
--- a/csync/tests/CMakeLists.txt
+++ b/csync/tests/CMakeLists.txt
@@ -35,10 +35,6 @@ add_cmocka_test(check_std_c_time std_tests/check_std_c_time.c ${TEST_TARGET_LIBR
 #add_cmocka_test(check_logger log_tests/check_log.c ${TEST_TARGET_LIBRARIES})
 
 add_cmocka_test(check_csync_create csync_tests/check_csync_create.c ${TEST_TARGET_LIBRARIES})
-# Disable lock testing for us.
-# if(NOT WIN32)
-# add_cmocka_test(check_csync_lock csync_tests/check_csync_lock.c ${TEST_TARGET_LIBRARIES})
-# endif()
 add_cmocka_test(check_csync_log csync_tests/check_csync_log.c ${TEST_TARGET_LIBRARIES})
 add_cmocka_test(check_csync_exclude csync_tests/check_csync_exclude.c ${TEST_TARGET_LIBRARIES})
 add_cmocka_test(check_csync_statedb_load csync_tests/check_csync_statedb_load.c ${TEST_TARGET_LIBRARIES})
diff --git a/csync/tests/csync_tests/check_csync_lock.c b/csync/tests/csync_tests/check_csync_lock.c
deleted file mode 100644
index 0ef76f6..0000000
--- a/csync/tests/csync_tests/check_csync_lock.c
+++ /dev/null
@@ -1,94 +0,0 @@
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <signal.h>
-#include <stdlib.h>
-#include <unistd.h>
-
-#include "torture.h"
-
-#define CSYNC_TEST 1
-#include "std/c_file.h"
-#include "csync_lock.h"
-
-#define TEST_LOCK "/tmp/check_csync/test"
-
-static void setup(void **state) {
-    int rc;
-
-    (void) state; /* unused */
-
-    rc = system("mkdir -p /tmp/check_csync");
-    assert_int_equal(rc, 0);
-}
-
-static void teardown(void **state) {
-    int rc;
-
-    (void) state; /* unused */
-
-    rc = system("rm -rf /tmp/check_csync");
-    assert_int_equal(rc, 0);
-}
-
-static void check_csync_lock(void **state)
-{
-    int rc;
-
-    (void) state; /* unused */
-
-    rc = csync_lock(TEST_LOCK);
-    assert_int_equal(rc, 0);
-
-    assert_true(c_isfile(TEST_LOCK));
-
-    rc = csync_lock(TEST_LOCK);
-    assert_int_equal(rc, -1);
-
-    csync_lock_remove(TEST_LOCK);
-    assert_false(c_isfile(TEST_LOCK));
-}
-
-static void check_csync_lock_content(void **state)
-{
-    char buf[8] = {0};
-    int  fd, pid, rc;
-
-    (void) state; /* unused */
-
-    rc = csync_lock(TEST_LOCK);
-    assert_int_equal(rc, 0);
-
-    assert_true(c_isfile(TEST_LOCK));
-
-    /* open lock file */
-    fd = open(TEST_LOCK, O_RDONLY);
-    assert_true(fd > 0);
-
-    /* read content */
-    pid = read(fd, buf, sizeof(buf));
-    close(fd);
-
-    assert_true(pid > 0);
-
-    /* get pid */
-    buf[sizeof(buf) - 1] = '\0';
-    pid = strtol(buf, NULL, 10);
-
-    assert_int_equal(pid, getpid());
-
-    csync_lock_remove(TEST_LOCK);
-    assert_false(c_isfile(TEST_LOCK));
-}
-
-int torture_run_tests(void)
-{
-    const UnitTest tests[] = {
-        unit_test_setup_teardown(check_csync_lock, setup, teardown),
-        unit_test_setup_teardown(check_csync_lock_content, setup, teardown),
-    };
-
-    return run_tests(tests);
-}
-

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-owncloud/owncloud-client.git



More information about the Pkg-owncloud-commits mailing list