*/
/* result, set by worker before exiting */
- DataChecksumsWorkerResult success;
+ DataChecksumsWorkerResult worker_result;
/*
* Tells the worker process whether it should also process the shared
BgwHandleStatus status;
pid_t pid;
char activity[NAMEDATALEN + 64];
+ DataChecksumsWorkerResult result;
+ /*
+ * Initialize result to FAILED. The worker will change it to SUCCESSFUL
+ * if it completes successfully.
+ */
LWLockAcquire(DataChecksumsWorkerLock, LW_EXCLUSIVE);
- DataChecksumState->success = DATACHECKSUMSWORKER_FAILED;
+ DataChecksumState->worker_result = DATACHECKSUMSWORKER_FAILED;
DataChecksumState->worker_pid = InvalidPid;
LWLockRelease(DataChecksumsWorkerLock);
* for it we can see a STOPPED status here without it being a failure.
*/
LWLockAcquire(DataChecksumsWorkerLock, LW_SHARED);
- if (DataChecksumState->success == DATACHECKSUMSWORKER_SUCCESSFUL)
+ if (DataChecksumState->worker_result == DATACHECKSUMSWORKER_SUCCESSFUL)
{
LWLockRelease(DataChecksumsWorkerLock);
pgstat_report_activity(STATE_IDLE, NULL);
- return DataChecksumState->success;
+ return DATACHECKSUMSWORKER_SUCCESSFUL;
}
LWLockRelease(DataChecksumsWorkerLock);
db->dbname),
errhint("Restart the database and restart data checksum processing by calling pg_enable_data_checksums()."));
- LWLockAcquire(DataChecksumsWorkerLock, LW_SHARED);
- if (DataChecksumState->success == DATACHECKSUMSWORKER_ABORTED)
- ereport(LOG,
- errmsg("data checksums processing was aborted in database \"%s\"",
- db->dbname));
- LWLockRelease(DataChecksumsWorkerLock);
-
- pgstat_report_activity(STATE_IDLE, NULL);
LWLockAcquire(DataChecksumsWorkerLock, LW_EXCLUSIVE);
+ result = DataChecksumState->worker_result;
DataChecksumState->worker_pid = InvalidPid;
LWLockRelease(DataChecksumsWorkerLock);
- return DataChecksumState->success;
+ if (result == DATACHECKSUMSWORKER_ABORTED)
+ ereport(LOG,
+ errmsg("data checksums processing was aborted in database \"%s\"",
+ db->dbname));
+ pgstat_report_activity(STATE_IDLE, NULL);
+ return result;
}
/*
if (aborted || abort_requested)
{
LWLockAcquire(DataChecksumsWorkerLock, LW_EXCLUSIVE);
- DataChecksumState->success = DATACHECKSUMSWORKER_ABORTED;
+ DataChecksumState->worker_result = DATACHECKSUMSWORKER_ABORTED;
LWLockRelease(DataChecksumsWorkerLock);
ereport(DEBUG1,
errmsg("data checksum processing aborted in database OID %u",
if (aborted || abort_requested)
{
LWLockAcquire(DataChecksumsWorkerLock, LW_EXCLUSIVE);
- DataChecksumState->success = DATACHECKSUMSWORKER_ABORTED;
+ DataChecksumState->worker_result = DATACHECKSUMSWORKER_ABORTED;
LWLockRelease(DataChecksumsWorkerLock);
ereport(LOG,
errmsg("data checksum processing aborted in database OID %u",
pgstat_progress_end_command();
LWLockAcquire(DataChecksumsWorkerLock, LW_EXCLUSIVE);
- DataChecksumState->success = DATACHECKSUMSWORKER_SUCCESSFUL;
+ DataChecksumState->worker_result = DATACHECKSUMSWORKER_SUCCESSFUL;
LWLockRelease(DataChecksumsWorkerLock);
}