Blame view

sync.h 2.79 KB
redmine authored
1
/*
redmine authored
2
    clsync - file tree sync utility based on fanotify and inotify
redmine authored
3

redmine authored
4
    Copyright (C) 2013  Dmitry Yu Okunev <dyokunev@ut.mephi.ru> 0x8E30679C
redmine authored
5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program 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 General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

redmine authored
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
#include <glib.h>	// GHashTable


struct thread_callbackfunct_arg {
	char *excfpath;
	char *incfpath;
};
typedef struct thread_callbackfunct_arg thread_callbackfunct_arg_t;

typedef int (*thread_callbackfunct_t)(ctx_t *ctx_p, thread_callbackfunct_arg_t *arg_p);
struct threadinfo {
	int				  thread_num;
	uint32_t			  iteration;
	thread_callbackfunct_t 		  callback;
	thread_callbackfunct_arg_t 	 *callback_arg;
	char				**argv;
	pthread_t			  pthread;
	int				  exitcode;
	int				  errcode;
	state_t				  state;
	ctx_t				 *ctx_p;
	time_t				  starttime;
	time_t				  expiretime;
	int				  child_pid;

	GHashTable			 *fpath2ei_ht;		// file path -> event information

	int				  try_n;

	// for so-synchandler
	int				  n;
	api_eventinfo_t			 *ei;
};
typedef struct threadinfo threadinfo_t;

struct threadsinfo {
	pthread_mutex_t		  mutex[PTHREAD_MUTEX_MAX];
	pthread_cond_t		  cond [PTHREAD_MUTEX_MAX];
	char			  mutex_init;
	int			  allocated;
	int			  used;
	threadinfo_t 		 *threads;
	threadinfo_t 		**threadsstack;	// stack of threadinfo_t to be used on thread_new()
	int			  stacklen;
};
typedef struct threadsinfo threadsinfo_t;


redmine authored
68
extern int sync_run(struct ctx *ctx);
redmine authored
69
extern int sync_dump(struct ctx *ctx, const char *const dest_dir);
redmine authored
70
extern int sync_term(int exitcode);
redmine authored
71
extern int threads_foreach(int (*funct)(threadinfo_t *, void *), state_t state, void *arg);
redmine authored
72 73 74 75 76 77 78 79 80 81 82 83
extern threadsinfo_t *thread_info();
extern time_t thread_nextexpiretime();
extern int sync_prequeue_loadmark
	(
		int fsmon_d,

		struct ctx     *ctx_p,
		struct indexes *indexes_p,

		const char *path_full,
		const char *path_rel,

redmine authored
84 85
		stat64_t *lstat_p,

redmine authored
86 87 88
		eventobjtype_t objtype_old,
		eventobjtype_t objtype_new,

redmine authored
89 90 91 92 93 94 95 96 97 98 99
		uint32_t event_mask,
		int      event_wd,
		mode_t st_mode,
		off_t  st_size,

		char  **path_buf_p,
		size_t *path_buf_len_p,

		struct eventinfo *evinfo
	);
extern int sync_prequeue_unload(struct ctx *ctx_p, struct indexes *indexes_p);
redmine authored
100
extern const char *sync_parameter_get(const char *variable_name, void *_dosync_arg_p);
redmine authored
101
extern pthread_t pthread_sighandler;
redmine authored
102