Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Skip to content

Commit 7970350

Browse files
Fenimorkindmpgpro
authored andcommitted
FIX for max_connection more faster
Conflicts: src/backend/commands/waitlsn.c
1 parent d3e1cbf commit 7970350

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)