1/* 2 Unix SMB/CIFS implementation. 3 global locks based on ctdb 4 Copyright (C) 2009 by Volker Lendecke 5 6 This program is free software; you can redistribute it and/or modify 7 it under the terms of the GNU General Public License as published by 8 the Free Software Foundation; either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful, 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18*/ 19 20#ifndef _G_LOCK_H_ 21#define _G_LOCK_H_ 22 23#include "dbwrap.h" 24 25struct g_lock_ctx; 26 27enum g_lock_type { 28 G_LOCK_READ = 0, 29 G_LOCK_WRITE = 1, 30}; 31 32/* 33 * Or'ed with g_lock_type 34 */ 35#define G_LOCK_PENDING (2) 36 37struct g_lock_ctx *g_lock_ctx_init(TALLOC_CTX *mem_ctx, 38 struct messaging_context *msg); 39 40NTSTATUS g_lock_lock(struct g_lock_ctx *ctx, const char *name, 41 enum g_lock_type lock_type, struct timeval timeout); 42NTSTATUS g_lock_unlock(struct g_lock_ctx *ctx, const char *name); 43NTSTATUS g_lock_get(struct g_lock_ctx *ctx, const char *name, 44 struct server_id *pid); 45 46NTSTATUS g_lock_do(const char *name, enum g_lock_type lock_type, 47 struct timeval timeout, 48 void (*fn)(void *private_data), void *private_data); 49 50int g_lock_locks(struct g_lock_ctx *ctx, 51 int (*fn)(const char *name, void *private_data), 52 void *private_data); 53NTSTATUS g_lock_dump(struct g_lock_ctx *ctx, const char *name, 54 int (*fn)(struct server_id pid, 55 enum g_lock_type lock_type, 56 void *private_data), 57 void *private_data); 58 59#endif 60