summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVolker Lendecke <vl@samba.org>2010-06-27 15:36:38 +0200
committerVolker Lendecke <vl@samba.org>2010-08-28 12:28:53 +0200
commit0f83aa865090bfaf06add6a9e8b7215ab1db7d95 (patch)
tree2e3b2a96d2c73aca228b822a63415c829f4e89e3
parent520c5aae40ce882b8c5c020eb728d4198106d6b7 (diff)
downloadsamba-0f83aa865090bfaf06add6a9e8b7215ab1db7d95.tar.gz
samba-0f83aa865090bfaf06add6a9e8b7215ab1db7d95.tar.bz2
samba-0f83aa865090bfaf06add6a9e8b7215ab1db7d95.zip
s3: Remove the dependency of g_lock on procid_self
procid_self() references global vars, don't depend on them unnecessarily
-rw-r--r--source3/include/g_lock.h2
-rw-r--r--source3/lib/g_lock.c22
-rw-r--r--source3/utils/net_g_lock.c2
-rw-r--r--source3/utils/net_registry.c2
4 files changed, 16 insertions, 12 deletions
diff --git a/source3/include/g_lock.h b/source3/include/g_lock.h
index becb71bb67..40922308a1 100644
--- a/source3/include/g_lock.h
+++ b/source3/include/g_lock.h
@@ -44,7 +44,7 @@ NTSTATUS g_lock_get(struct g_lock_ctx *ctx, const char *name,
struct server_id *pid);
NTSTATUS g_lock_do(const char *name, enum g_lock_type lock_type,
- struct timeval timeout,
+ struct timeval timeout, struct server_id self,
void (*fn)(void *private_data), void *private_data);
int g_lock_locks(struct g_lock_ctx *ctx,
diff --git a/source3/lib/g_lock.c b/source3/lib/g_lock.c
index 49f719b5fc..42bf3b0916 100644
--- a/source3/lib/g_lock.c
+++ b/source3/lib/g_lock.c
@@ -206,7 +206,7 @@ again:
goto done;
}
- self = procid_self();
+ self = messaging_server_id(ctx->msg);
our_index = -1;
for (i=0; i<num_locks; i++) {
@@ -312,8 +312,8 @@ NTSTATUS g_lock_lock(struct g_lock_ctx *ctx, const char *name,
#ifdef CLUSTER_SUPPORT
if (lp_clustering()) {
- status = ctdb_watch_us(
- messaging_ctdbd_connection(procid_self()));
+ struct server_id my_id = messaging_server_id(ctx->msg);
+ status = ctdb_watch_us(messaging_ctdbd_connection(my_id));
if (!NT_STATUS_IS_OK(status)) {
DEBUG(10, ("could not register retry with ctdb: %s\n",
nt_errstr(status)));
@@ -388,9 +388,11 @@ NTSTATUS g_lock_lock(struct g_lock_ctx *ctx, const char *name,
#ifdef CLUSTER_SUPPORT
if (lp_clustering()) {
+ struct server_id my_id;
struct ctdbd_connection *conn;
- conn = messaging_ctdbd_connection(procid_self());
+ my_id = messaging_server_id(ctx->msg);
+ conn = messaging_ctdbd_connection(my_id);
r_fds = &_r_fds;
FD_ZERO(r_fds);
@@ -591,11 +593,12 @@ NTSTATUS g_lock_unlock(struct g_lock_ctx *ctx, const char *name)
{
NTSTATUS status;
- status = g_lock_force_unlock(ctx, name, procid_self());
+ status = g_lock_force_unlock(ctx, name, messaging_server_id(ctx->msg));
#ifdef CLUSTER_SUPPORT
if (lp_clustering()) {
- ctdb_unwatch(messaging_ctdbd_connection(procid_self()));
+ struct server_id my_id = messaging_server_id(ctx->msg);
+ ctdb_unwatch(messaging_ctdbd_connection(my_id));
}
#endif
return status;
@@ -708,6 +711,7 @@ NTSTATUS g_lock_get(struct g_lock_ctx *ctx, const char *name,
static bool g_lock_init_all(TALLOC_CTX *mem_ctx,
struct tevent_context **pev,
struct messaging_context **pmsg,
+ const struct server_id self,
struct g_lock_ctx **pg_ctx)
{
struct tevent_context *ev = NULL;
@@ -719,7 +723,7 @@ static bool g_lock_init_all(TALLOC_CTX *mem_ctx,
d_fprintf(stderr, "ERROR: could not init event context\n");
goto fail;
}
- msg = messaging_init(mem_ctx, procid_self(), ev);
+ msg = messaging_init(mem_ctx, self, ev);
if (msg == NULL) {
d_fprintf(stderr, "ERROR: could not init messaging context\n");
goto fail;
@@ -742,7 +746,7 @@ fail:
}
NTSTATUS g_lock_do(const char *name, enum g_lock_type lock_type,
- struct timeval timeout,
+ struct timeval timeout, const struct server_id self,
void (*fn)(void *private_data), void *private_data)
{
struct tevent_context *ev = NULL;
@@ -750,7 +754,7 @@ NTSTATUS g_lock_do(const char *name, enum g_lock_type lock_type,
struct g_lock_ctx *g_ctx = NULL;
NTSTATUS status;
- if (!g_lock_init_all(talloc_tos(), &ev, &msg, &g_ctx)) {
+ if (!g_lock_init_all(talloc_tos(), &ev, &msg, self, &g_ctx)) {
status = NT_STATUS_ACCESS_DENIED;
goto done;
}
diff --git a/source3/utils/net_g_lock.c b/source3/utils/net_g_lock.c
index a683b552de..937c11c0c4 100644
--- a/source3/utils/net_g_lock.c
+++ b/source3/utils/net_g_lock.c
@@ -90,7 +90,7 @@ static int net_g_lock_do(struct net_context *c, int argc, const char **argv)
status = g_lock_do(name, G_LOCK_WRITE,
timeval_set(timeout / 1000, timeout % 1000),
- net_g_lock_do_fn, &state);
+ procid_self(), net_g_lock_do_fn, &state);
if (!NT_STATUS_IS_OK(status)) {
d_fprintf(stderr, "ERROR: g_lock_do failed: %s\n",
nt_errstr(status));
diff --git a/source3/utils/net_registry.c b/source3/utils/net_registry.c
index 4a6af959dc..f90d05454b 100644
--- a/source3/utils/net_registry.c
+++ b/source3/utils/net_registry.c
@@ -488,7 +488,7 @@ static int net_registry_increment(struct net_context *c, int argc,
}
status = g_lock_do("registry_increment_lock", G_LOCK_WRITE,
- timeval_set(600, 0),
+ timeval_set(600, 0), procid_self(),
net_registry_increment_fn, &state);
if (!NT_STATUS_IS_OK(status)) {
d_fprintf(stderr, _("g_lock_do failed: %s\n"),