This avoids this structure being partially uninitialised.
Adnrew Bartlett
struct serverid_key {
pid_t pid;
-#ifdef CLUSTER_SUPPORT
uint32_t vnn;
-#endif
};
struct serverid_data {
{
ZERO_STRUCTP(key);
key->pid = id->pid;
-#ifdef CLUSTER_SUPPORT
key->vnn = id->vnn;
-#endif
}
bool serverid_register(const struct server_id id, uint32_t msg_flags)
memcpy(&data, rec->value.dptr, sizeof(data));
id->pid = key.pid;
-#ifdef CLUSTER_SUPPORT
id->vnn = key.vnn;
-#endif
id->unique_id = data.unique_id;
*msg_flags = data.msg_flags;
return true;
struct server_id result;
result.pid = pid;
result.unique_id = my_unique_id;
-#ifdef CLUSTER_SUPPORT
result.vnn = my_vnn;
-#endif
return result;
}
{
if (p1->pid != p2->pid)
return False;
-#ifdef CLUSTER_SUPPORT
if (p1->vnn != p2->vnn)
return False;
-#endif
return True;
}
{
if (pid->pid != sys_getpid())
return False;
-#ifdef CLUSTER_SUPPORT
if (pid->vnn != my_vnn)
return False;
-#endif
return True;
}
{
struct server_id result;
int pid;
-#ifdef CLUSTER_SUPPORT
unsigned int vnn;
if (sscanf(pid_string, "%u:%d", &vnn, &pid) == 2) {
result.vnn = vnn;
result.vnn = NONCLUSTER_VNN;
result.pid = -1;
}
-#else
- if (sscanf(pid_string, "%d", &pid) != 1) {
- result.pid = -1;
- } else {
- result.pid = pid;
- }
-#endif
/* Assigning to result.pid may have overflowed
Map negative pid to -1: i.e. error */
if (result.pid < 0) {
char *procid_str(TALLOC_CTX *mem_ctx, const struct server_id *pid)
{
-#ifdef CLUSTER_SUPPORT
if (pid->vnn == NONCLUSTER_VNN) {
return talloc_asprintf(mem_ctx,
"%d",
(unsigned)pid->vnn,
(int)pid->pid);
}
-#else
- return talloc_asprintf(mem_ctx,
- "%d",
- (int)pid->pid);
-#endif
}
char *procid_str_static(const struct server_id *pid)
bool procid_is_local(const struct server_id *pid)
{
-#ifdef CLUSTER_SUPPORT
return pid->vnn == my_vnn;
-#else
- return True;
-#endif
}
/****************************************************************
SIVAL(msg,OP_BREAK_MSG_UID_OFFSET,e->uid);
SSVAL(msg,OP_BREAK_MSG_FLAGS_OFFSET,e->flags);
SIVAL(msg,OP_BREAK_MSG_NAME_HASH_OFFSET,e->name_hash);
-#ifdef CLUSTER_SUPPORT
SIVAL(msg,OP_BREAK_MSG_VNN_OFFSET,e->pid.vnn);
-#endif
}
/****************************************************************************
e->uid = (uint32)IVAL(msg,OP_BREAK_MSG_UID_OFFSET);
e->flags = (uint16)SVAL(msg,OP_BREAK_MSG_FLAGS_OFFSET);
e->name_hash = IVAL(msg,OP_BREAK_MSG_NAME_HASH_OFFSET);
-#ifdef CLUSTER_SUPPORT
e->pid.vnn = IVAL(msg,OP_BREAK_MSG_VNN_OFFSET);
-#endif
}
/****************************************************************************
{
NTSTATUS status;
-#ifdef CLUSTER_SUPPORT
if (id->vnn != get_my_vnn()) {
return 0;
}
-#endif
status = rec->delete_rec(rec);
if (!NT_STATUS_IS_OK(status)) {
char *str = procid_str(talloc_tos(), id);