git.samba.org
/
ctdb.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
client: Make g_lock_lock() wait till lock is obtained
[ctdb.git]
/
client
/
ctdb_client.c
diff --git
a/client/ctdb_client.c
b/client/ctdb_client.c
index 6ccc4c906aac238bfac02be3cb31bb1bb7d3ed3a..fddbd02b628514a57b744644a1216ca5778ee03c 100644
(file)
--- a/
client/ctdb_client.c
+++ b/
client/ctdb_client.c
@@
-3856,10
+3856,20
@@
static bool g_lock_lock(TALLOC_CTX *mem_ctx,
struct ctdb_record_handle *h;
struct g_lock_recs *locks;
struct server_id id;
struct ctdb_record_handle *h;
struct g_lock_recs *locks;
struct server_id id;
+ struct timeval t_start;
int i;
key.dptr = (uint8_t *)discard_const(keyname);
key.dsize = strlen(keyname) + 1;
int i;
key.dptr = (uint8_t *)discard_const(keyname);
key.dsize = strlen(keyname) + 1;
+
+ t_start = timeval_current();
+
+again:
+ /* Keep trying for an hour. */
+ if (timeval_elapsed(&t_start) > 3600) {
+ return false;
+ }
+
h = ctdb_fetch_lock(ctdb_db, mem_ctx, key, &data);
if (h == NULL) {
return false;
h = ctdb_fetch_lock(ctdb_db, mem_ctx, key, &data);
if (h == NULL) {
return false;
@@
-3899,7
+3909,7
@@
static bool g_lock_lock(TALLOC_CTX *mem_ctx,
id.task_id, id.vnn,
(unsigned long long)id.unique_id));
talloc_free(h);
id.task_id, id.vnn,
(unsigned long long)id.unique_id));
talloc_free(h);
-
return false
;
+
goto again
;
}
locks->lock = talloc_realloc(locks, locks->lock, struct g_lock_rec,
}
locks->lock = talloc_realloc(locks, locks->lock, struct g_lock_rec,