(unnamed)
text/plain
Index: src/backend/postmaster/pgstat.c
===================================================================
RCS file: /cvsroot/pgsql/src/backend/postmaster/pgstat.c,v
retrieving revision 1.118
diff -c -c -r1.118 pgstat.c
*** src/backend/postmaster/pgstat.c 3 Jan 2006 19:54:08 -0000 1.118
--- src/backend/postmaster/pgstat.c 4 Jan 2006 23:22:44 -0000
***************
*** 1839,1845 ****
int msg_recv = 0; /* next receive index */
int msg_have = 0; /* number of bytes stored */
bool overflow = false;
!
/*
* Identify myself via ps
*/
--- 1839,1847 ----
int msg_recv = 0; /* next receive index */
int msg_have = 0; /* number of bytes stored */
bool overflow = false;
! bool is_block_mode = false;
! int cnt = 0, bloops = 0, nbloops = 0;
!
/*
* Identify myself via ps
*/
***************
*** 1870,1875 ****
--- 1872,1921 ----
*/
msgbuffer = (char *) palloc(PGSTAT_RECVBUFFERSZ);
+
+ while (1)
+ {
+ #if 0
+ FD_ZERO(&rfds);
+ FD_ZERO(&wfds);
+ maxfd = -1;
+ FD_SET(pgStatSock, &rfds);
+ maxfd = pgStatSock;
+
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 0;
+
+ select(maxfd + 1, &rfds, &wfds, NULL, &timeout);
+ #endif
+
+ if (is_block_mode)
+ bloops++;
+ else
+ nbloops++;
+
+ len = recv(pgStatSock, (char *) &input_buffer,
+ sizeof(PgStat_Msg), 0);
+ if (len > 0)
+ cnt += len;
+
+ //fprintf(stderr, "len = %d, errno = %d\n", len, errno);
+
+ if (len > 0 && is_block_mode)
+ {
+ pg_set_noblock(pgStatSock);
+ is_block_mode = false;
+ }
+ else if (len < 0 && errno == EAGAIN && !is_block_mode)
+ {
+ pg_set_block(pgStatSock);
+ is_block_mode = true;
+ }
+ // if ((bloops + nbloops) % 1000 == 0)
+ // fprintf(stderr, "cnt = %d, len = %d, bloops = %d, nbloops = %d\n", cnt, len, bloops, nbloops);
+ }
+
+ exit(1);
+
/*
* Loop forever
*/