Pass parameter got_sigterm by reference

This commit is contained in:
wbaumann 2014-06-20 06:59:02 +00:00
parent eb23829117
commit c599280cf1
5 changed files with 16 additions and 12 deletions

View File

@ -1,6 +1,10 @@
ChangeLog for davfs2 ChangeLog for davfs2
-------------------- --------------------


2014-06-20 Werner Baumann (werner.baumann@onlinehome.de)
* cache.c, cache.h, mount_davfs.c:
Pass parameter got_sigterm by reference.

2014-06-19 Werner Baumann (werner.baumann@onlinehome.de) 2014-06-19 Werner Baumann (werner.baumann@onlinehome.de)
* Mount_davfs.c, main: * Mount_davfs.c, main:
Only log error if still is mounted. Only log error if still is mounted.

View File

@ -22,7 +22,7 @@
de:de/davfs2.conf.5 add_de:de/davfs2.conf.5.translator \ de:de/davfs2.conf.5 add_de:de/davfs2.conf.5.translator \
es:es/davfs2.conf.5 \ es:es/davfs2.conf.5 \
opt_de:"-L UTF-8 -A UTF-8" \ opt_de:"-L UTF-8 -A UTF-8" \
opt_es:"-k 74 -L UTF-8" opt_es:"-k 70 -L UTF-8"


[type:man] mount.davfs.8 \ [type:man] mount.davfs.8 \
de:de/mount.davfs.8 add_de:de/mount.davfs.8.translator \ de:de/mount.davfs.8 add_de:de/mount.davfs.8.translator \

View File

@ -265,7 +265,7 @@ static void
backup_node(dav_node *orig); backup_node(dav_node *orig);


static void static void
clean_tree(dav_node *node, int upload); clean_tree(dav_node *node, volatile int *got_sigterm);


static void static void
delete_node(dav_node *node); delete_node(dav_node *node);
@ -684,14 +684,14 @@ dav_init_cache(const dav_args *args, const char *mpoint)




void void
dav_close_cache(int got_sigterm) dav_close_cache(volatile int *got_sigterm)
{ {
if (debug) if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Closing cache"); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Closing cache");


write_dir_entry = &write_dir_entry_dummy; write_dir_entry = &write_dir_entry_dummy;


clean_tree(root, !got_sigterm); clean_tree(root, got_sigterm);


char *new_index = xasprintf("%s/%s.new",cache_dir, DAV_INDEX); char *new_index = xasprintf("%s/%s.new",cache_dir, DAV_INDEX);
if (debug) if (debug)
@ -1616,7 +1616,7 @@ backup_node(dav_node *orig)




/* Scans the directory tree starting from node and /* Scans the directory tree starting from node and
- if upload == 1: saves dirty files to the server and unlocks them. - if *got_sigterm == 1: saves dirty files to the server and unlocks them.
If it can not be safed, a local backup is created and the node is deleted. If it can not be safed, a local backup is created and the node is deleted.
- removes any file nodes without cached file - removes any file nodes without cached file
- removes all dir nodes that have not at least one file node below. - removes all dir nodes that have not at least one file node below.
@ -1627,7 +1627,7 @@ backup_node(dav_node *orig)
Kernel will *not* be notified about changes. Kernel will *not* be notified about changes.
Member nref of directories will be adjusted. */ Member nref of directories will be adjusted. */
static void static void
clean_tree(dav_node *node, int upload) clean_tree(dav_node *node, volatile int *got_sigterm)
{ {
if (node == backup) { if (node == backup) {
delete_cache_file(backup); delete_cache_file(backup);
@ -1639,7 +1639,7 @@ clean_tree(dav_node *node, int upload)
dav_node *child = node->childs; dav_node *child = node->childs;
while (child) { while (child) {
dav_node *next = child->next; dav_node *next = child->next;
clean_tree(child, upload); clean_tree(child, got_sigterm);
child = next; child = next;
} }
if (!node->childs && node != root && node != backup) { if (!node->childs && node != root && node != backup) {
@ -1652,13 +1652,13 @@ clean_tree(dav_node *node, int upload)


} else if (!is_cached(node) || access(node->cache_path, F_OK) != 0) { } else if (!is_cached(node) || access(node->cache_path, F_OK) != 0) {


if (is_locked(node) && upload) if (is_locked(node) && !*got_sigterm)
dav_unlock(node->path, &node->lock_expire); dav_unlock(node->path, &node->lock_expire);
remove_from_tree(node); remove_from_tree(node);
remove_from_table(node); remove_from_table(node);
delete_node(node); delete_node(node);


} else if ((is_dirty(node) || is_created(node)) && upload) { } else if ((is_dirty(node) || is_created(node)) && !*got_sigterm) {


int ret = dav_put(node->path, node->cache_path, int ret = dav_put(node->path, node->cache_path,
&node->remote_exists, &node->lock_expire, &node->remote_exists, &node->lock_expire,

View File

@ -192,10 +192,10 @@ dav_init_cache(const dav_args *args, const char *mpoint);
a local backup file is created. All local copies of files and the necessary a local backup file is created. All local copies of files and the necessary
directories are stored in the permanent cache. A new index file of the directories are stored in the permanent cache. A new index file of the
permanent cache is created. permanent cache is created.
If got_sigterm is 1, dirty files will not be stored back to the server. If *got_sigterm is 1, dirty files will not be stored back to the server.
Finally it frees all nodes. */ Finally it frees all nodes. */
void void
dav_close_cache(int got_sigterm); dav_close_cache(volatile int *got_sigterm);




/* Registers the kernel_interface. /* Registers the kernel_interface.

View File

@ -358,7 +358,7 @@ main(int argc, char *argv[])


if (debug) if (debug)
syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Closing"); syslog(LOG_MAKEPRI(LOG_DAEMON, LOG_DEBUG), "Closing");
dav_close_cache(got_sigterm); dav_close_cache(&got_sigterm);
dav_close_webdav(); dav_close_webdav();
if (dav_is_mounted()) { if (dav_is_mounted()) {
char *prog = xasprintf("/bin/umount -il %s", mpoint); char *prog = xasprintf("/bin/umount -il %s", mpoint);