Skip to content

Commit 51412a9

Browse files
Fenimorkindmpgpro
authored andcommitted
FIX for max_connection more faster
Conflicts: src/backend/commands/waitlsn.c
1 parent 9c6b9bd commit 51412a9

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

src/backend/commands/waitlsn.c

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@ typedef struct
5656
typedef struct
5757
{
5858
char dummy;
59+
int backend_maxid;
5960
BIDLatch l_arr[FLEXIBLE_ARRAY_MEMBER];
6061
} GlobState;
6162

@@ -68,17 +69,31 @@ WLOwnLatch(void)
6869
SpinLockAcquire(&state->l_arr[MyBackendId].slock);
6970
OwnLatch(&state->l_arr[MyBackendId].latch);
7071
is_latch_owned = true;
72+
73+
if (state->backend_maxid < MyBackendId)
74+
state->backend_maxid = MyBackendId;
75+
7176
state->l_arr[MyBackendId].pid = MyProcPid;
7277
SpinLockRelease(&state->l_arr[MyBackendId].slock);
7378
}
7479

7580
static void
7681
WLDisownLatch(void)
7782
{
83+
int i;
7884
SpinLockAcquire(&state->l_arr[MyBackendId].slock);
7985
DisownLatch(&state->l_arr[MyBackendId].latch);
8086
is_latch_owned = false;
8187
state->l_arr[MyBackendId].pid = 0;
88+
89+
if (state->backend_maxid == MyBackendId)
90+
for (i = (MaxConnections+1); i >=0; i--)
91+
if (state->l_arr[i].pid != 0)
92+
{
93+
state->backend_maxid = i;
94+
break;
95+
}
96+
8297
SpinLockRelease(&state->l_arr[MyBackendId].slock);
8398
}
8499

@@ -124,14 +139,15 @@ WaitLSNShmemInit(void)
124139
SpinLockInit(&state->l_arr[i].slock);
125140
InitSharedLatch(&state->l_arr[i].latch);
126141
}
142+
state->backend_maxid = 0;
127143
}
128144
}
129145

130146
void
131147
WaitLSNSetLatch(void)
132148
{
133-
uint32 i;
134-
for (i = 0; i < (MaxConnections+1); i++)
149+
uint i;
150+
for (i = 0; i <= state->backend_maxid; i++)
135151
{
136152
SpinLockAcquire(&state->l_arr[i].slock);
137153
if (state->l_arr[i].pid != 0)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy