clarify-fatal-error-in-conflict-resolve.patch
application/octet-stream
Filename: clarify-fatal-error-in-conflict-resolve.patch
Type: application/octet-stream
Part: 0
Patch
Same data as JSON:
GET /api/v1/attachments/:id/patch
the parsed metadata as JSON — format, series position, per-file stats; never the diff bytes.
API reference →
Format: unified
| File | + | − |
|---|---|---|
| src/backend/tcop/postgres.c | 14 | 0 |
diff --git a/src/backend/tcop/postgres.c b/src/backend/tcop/postgres.c index 585db1a..2e04231 100644 --- a/src/backend/tcop/postgres.c +++ b/src/backend/tcop/postgres.c @@ -2918,6 +2918,20 @@ ProcessInterrupts(void) DisableNotifyInterrupt(); DisableCatchupInterrupt(); pgstat_report_recovery_conflict(RecoveryConflictReason); + + /* + * If we are in DoingCommandRead state, we can't really use + * ereport(ERROR) because long jumps are not recommended in this + * state. By throwing longjmps in this state, we not only risks of + * breaking protocol at our level, but also risks leaving openssl + * in an inconsistent state, either violating the ssl protocol or + * simply with internal state trashed because it got interrupted + * in the middle of changing it. + * + * Our best possible remedy for now is to promote ERROR to FATAL + * until we figure out a way to handle errors more effectively in + * this state. + */ if (DoingCommandRead) ereport(FATAL, (errcode(ERRCODE_T_R_SERIALIZATION_FAILURE),