diff --git a/maestro/groups.c b/maestro/groups.c index 1f2c61b88199f6c46c4c80ea1f4df72178522c1d..6a7f7cdd65437d85217eec66d871351138520aa1 100644 --- a/maestro/groups.c +++ b/maestro/groups.c @@ -312,20 +312,21 @@ mstro_group_seal(mstro_group g) HASH_ITER(hh, g->members, el, tmp) { m->declared_members[i] = malloc(sizeof(Mstro__Pool__UUID)); /* need to ensure the GID is ready */ - mstro_status s = mstro_cdo_seal(el->entry); - if(s!=MSTRO_OK) { - ERR("Failed to seal declared group member: %d\n", s); - } - if(s!=MSTRO_OK || m->declared_members[i]==NULL) { - for(size_t j=i; j>0; j--) { - free(m->declared_members[j-1]); - }; - free(m->declared_members); - m->declared_members=NULL; - goto BAILOUT_FREE; - + if(!mstro_cdo_state_check(el->entry, MSTRO_CDO_STATE_SEALED)) { + mstro_status s = mstro_cdo_seal(el->entry); + if(s!=MSTRO_OK) { + ERR("Failed to seal declared group member: %d\n", s); + } + if(s!=MSTRO_OK || m->declared_members[i]==NULL) { + for(size_t j=i; j>0; j--) { + free(m->declared_members[j-1]); + }; + free(m->declared_members); + m->declared_members=NULL; + goto BAILOUT_FREE; + + } } - mstro__pool__uuid__init(m->declared_members[i]); m->declared_members[i]->qw0 = el->entry->gid.qw[0]; m->declared_members[i]->qw1 = el->entry->gid.qw[1]; diff --git a/transport/transport.c b/transport/transport.c index 101ec6c921e6d41e59c5e8b294cbf6c9dbf6ea51..0690af7edff5ead202d06172de6cb67b7c0c930f 100644 --- a/transport/transport.c +++ b/transport/transport.c @@ -381,16 +381,18 @@ mstro_transport_execute( if(s==MSTRO_OK) { src_size=*(int64_t*)sizep; } else if(s==MSTRO_NOENT && type==MSTRO_CDO_ATTR_VALUE_INVALID) { + ERR("Attribute not found or value invalid\n"); src_size=-1; } else { ERR("Failed to look up %s (%d: %s)\n", MSTRO_ATTR_CORE_CDO_SCOPE_LOCAL_SIZE, s, mstro_status_description(s)); return MSTRO_FAIL; } - // XXX Let's use mamba, while we figure out the attribute corruption -// src_size = cdo->mamba_array->allocation->n_bytes; - - if (src_size != ticket->data_size) { + + if (ticket->data_size == 0) { + DEBUG("0-transport\n"); + } + else if (src_size != ticket->data_size) { ERR("SRC cdo has a size (%" PRIi64 ") that doesn't match ticket-specified size (%" PRIi64 ")\n", src_size, ticket->data_size); return MSTRO_FAIL;