before_desc = palloc(nkinds * sizeof(ResourceOwnerDesc)); for (int i = 0; i < nkinds; i++)
{
before_desc[i].name = psprintf("test resource before locks %d", i);
before_desc[i].release_phase = RESOURCE_RELEASE_BEFORE_LOCKS;
before_desc[i].release_priority = RELEASE_PRIO_FIRST + i;
before_desc[i].ReleaseResource = ReleaseString;
before_desc[i].DebugPrint = PrintString;
}
after_desc = palloc(nkinds * sizeof(ResourceOwnerDesc)); for (int i = 0; i < nkinds; i++)
{
after_desc[i].name = psprintf("test resource after locks %d", i);
after_desc[i].release_phase = RESOURCE_RELEASE_AFTER_LOCKS;
after_desc[i].release_priority = RELEASE_PRIO_FIRST + i;
after_desc[i].ReleaseResource = ReleaseString;
after_desc[i].DebugPrint = PrintString;
}
/* Add a bunch of resources to child, with different priorities */ for (int i = 0; i < nresources; i++)
{
ResourceOwnerDesc *kind = &before_desc[i % nkinds];
ResourceOwnerEnlarge(child);
ResourceOwnerRemember(child,
CStringGetDatum(psprintf("child before locks priority %d", kind->release_priority)),
kind);
} for (int i = 0; i < nresources; i++)
{
ResourceOwnerDesc *kind = &after_desc[i % nkinds];
ResourceOwnerEnlarge(child);
ResourceOwnerRemember(child,
CStringGetDatum(psprintf("child after locks priority %d", kind->release_priority)),
kind);
}
/* And also to the parent */ for (int i = 0; i < nresources; i++)
{
ResourceOwnerDesc *kind = &after_desc[i % nkinds];
ResourceOwnerEnlarge(parent);
ResourceOwnerRemember(parent,
CStringGetDatum(psprintf("parent after locks priority %d", kind->release_priority)),
kind);
} for (int i = 0; i < nresources; i++)
{
ResourceOwnerDesc *kind = &before_desc[i % nkinds];
ResourceOwnerEnlarge(parent);
ResourceOwnerRemember(parent,
CStringGetDatum(psprintf("parent before locks priority %d", kind->release_priority)),
kind);
}
/* unreachable */
elog(ERROR, "ResourceOwnerEnlarge should have errored out");
PG_RETURN_VOID();
}
PG_FUNCTION_INFO_V1(test_resowner_forget_between_phases);
Datum
test_resowner_forget_between_phases(PG_FUNCTION_ARGS)
{
ResourceOwner resowner;
Datum str_resource;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.