G_LOCK_WRITE = 1,
};
+struct g_lock_rec {
+ enum g_lock_type lock_type;
+ struct server_id pid;
+};
+
struct g_lock_ctx *g_lock_ctx_init(TALLOC_CTX *mem_ctx,
struct messaging_context *msg);
int (*fn)(const char *name, void *private_data),
void *private_data);
NTSTATUS g_lock_dump(struct g_lock_ctx *ctx, const char *name,
- int (*fn)(struct server_id pid,
- enum g_lock_type lock_type,
- void *private_data),
+ void (*fn)(const struct g_lock_rec *locks,
+ size_t num_locks,
+ const uint8_t *data,
+ size_t datalen,
+ void *private_data),
void *private_data);
#endif
* structures.
*/
-struct g_lock_rec {
- enum g_lock_type lock_type;
- struct server_id pid;
-};
-
#define G_LOCK_REC_LENGTH (SERVER_ID_BUF_LENGTH+1)
static void g_lock_rec_put(uint8_t buf[G_LOCK_REC_LENGTH],
}
NTSTATUS g_lock_dump(struct g_lock_ctx *ctx, const char *name,
- int (*fn)(struct server_id pid,
- enum g_lock_type lock_type,
- void *private_data),
+ void (*fn)(const struct g_lock_rec *locks,
+ size_t num_locks,
+ const uint8_t *data,
+ size_t datalen,
+ void *private_data),
void *private_data)
{
TDB_DATA data;
- size_t i, num_locks;
+ size_t num_locks;
struct g_lock_rec *locks = NULL;
+ uint8_t *userdata;
+ size_t userdatalen;
NTSTATUS status;
status = dbwrap_fetch_bystring(ctx->db, talloc_tos(), name, &data);
}
status = g_lock_get_talloc(talloc_tos(), data, &locks, &num_locks,
- NULL, NULL);
-
- TALLOC_FREE(data.dptr);
+ &userdata, &userdatalen);
if (!NT_STATUS_IS_OK(status)) {
DBG_DEBUG("g_lock_get for %s failed: %s\n", name,
nt_errstr(status));
+ TALLOC_FREE(data.dptr);
return NT_STATUS_INTERNAL_ERROR;
}
- for (i=0; i<num_locks; i++) {
- if (fn(locks[i].pid, locks[i].lock_type, private_data) != 0) {
- break;
- }
- }
+ fn(locks, num_locks, userdata, userdatalen, private_data);
+
TALLOC_FREE(locks);
+ TALLOC_FREE(data.dptr);
return NT_STATUS_OK;
}
return state.result;
}
-static int net_g_lock_dump_fn(struct server_id pid, enum g_lock_type lock_type,
- void *private_data)
+static void net_g_lock_dump_fn(const struct g_lock_rec *locks,
+ size_t num_locks,
+ const uint8_t *data,
+ size_t datalen,
+ void *private_data)
{
- struct server_id_buf idbuf;
- d_printf("%s: %s\n", server_id_str_buf(pid, &idbuf),
- (lock_type & 1) ? "WRITE" : "READ");
- return 0;
+ size_t i;
+
+ for (i=0; i<num_locks; i++) {
+ const struct g_lock_rec *l = &locks[i];
+ struct server_id_buf idbuf;
+ d_printf("%s: %s\n", server_id_str_buf(l->pid, &idbuf),
+ (l->lock_type & 1) ? "WRITE" : "READ");
+ }
}
static int net_g_lock_dump(struct net_context *c, int argc, const char **argv)