Commit caa3c424 authored by Fujii Masao's avatar Fujii Masao

Don't call elog() while holding spinlock.

Previously UpdateSpillStats() called elog(DEBUG2) while holding
the spinlock even though the local variables that the elog() accesses
don't need to be protected by the lock. Since spinlocks are intended
for very short-term locks, they should not be used when calling
elog(DEBUG2). So this commit moves that elog() out of spinlock period.

Author: Kyotaro Horiguchi
Reviewed-by: Amit Kapila and Fujii Masao
Discussion: https://postgr.es/m/20200602.161518.1399689010416646074.horikyota.ntt@gmail.com
parent e641b2a9
...@@ -3685,17 +3685,15 @@ UpdateSpillStats(LogicalDecodingContext *ctx) ...@@ -3685,17 +3685,15 @@ UpdateSpillStats(LogicalDecodingContext *ctx)
{ {
ReorderBuffer *rb = ctx->reorder; ReorderBuffer *rb = ctx->reorder;
SpinLockAcquire(&MyWalSnd->mutex);
MyWalSnd->spillTxns = rb->spillTxns;
MyWalSnd->spillCount = rb->spillCount;
MyWalSnd->spillBytes = rb->spillBytes;
elog(DEBUG2, "UpdateSpillStats: updating stats %p %lld %lld %lld", elog(DEBUG2, "UpdateSpillStats: updating stats %p %lld %lld %lld",
rb, rb,
(long long) rb->spillTxns, (long long) rb->spillTxns,
(long long) rb->spillCount, (long long) rb->spillCount,
(long long) rb->spillBytes); (long long) rb->spillBytes);
SpinLockAcquire(&MyWalSnd->mutex);
MyWalSnd->spillTxns = rb->spillTxns;
MyWalSnd->spillCount = rb->spillCount;
MyWalSnd->spillBytes = rb->spillBytes;
SpinLockRelease(&MyWalSnd->mutex); SpinLockRelease(&MyWalSnd->mutex);
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment