1
0
mirror of https://github.com/postgres/postgres.git synced 2025-06-30 21:42:05 +03:00

Fix representation of SORT_TYPE_STILL_IN_PROGRESS.

It turns out that the code did indeed rely on a zeroed
TuplesortInstrumentation.sortMethod field to indicate
"this worker never did anything", although it seems the
issue only comes up during certain race-condition-y cases.

Hence, rearrange the TuplesortMethod enum to restore
SORT_TYPE_STILL_IN_PROGRESS to having the value zero,
and add some comments reinforcing that that isn't optional.

Also future-proof a loop over the possible values of the enum.
sizeof(bits32) happened to be the correct limit value,
but only by purest coincidence.

Per buildfarm and local investigation.

Discussion: https://postgr.es/m/12222.1586223974@sss.pgh.pa.us
This commit is contained in:
Tom Lane
2020-04-06 22:22:13 -04:00
parent 4c04be9b05
commit c7654f6a37
2 changed files with 19 additions and 13 deletions

View File

@ -2762,14 +2762,14 @@ show_incremental_sort_group_info(IncrementalSortGroupInfo *groupInfo,
List *methodNames = NIL;
/* Generate a list of sort methods used across all groups. */
for (int bit = 0; bit < sizeof(bits32); ++bit)
for (int bit = 0; bit < NUM_TUPLESORTMETHODS; bit++)
{
if (groupInfo->sortMethods & (1 << bit))
{
TuplesortMethod sortMethod = (1 << bit);
const char *methodName;
TuplesortMethod sortMethod = (1 << bit);
if (groupInfo->sortMethods & sortMethod)
{
const char *methodName = tuplesort_method_name(sortMethod);
methodName = tuplesort_method_name(sortMethod);
methodNames = lappend(methodNames, unconstify(char *, methodName));
}
}