[Pgpool-general] hanging pgpool processes during massive UPDATEs
Yoshiyuki Asaba
y-asaba at sraoss.co.jp
Fri Oct 12 05:31:12 UTC 2007
From: Yoshiyuki Asaba <y-asaba at sraoss.co.jp>
Subject: Re: [Pgpool-general] hanging pgpool processes during massive UPDATEs
Date: Thu, 11 Oct 2007 17:12:26 +0900 (JST)
> I will fix tomorrow, sorry.
It's done. The patch is attached.
% cp diff pgpool-II-1.2.1/
% cd pgpool-II-1.2.1/
% patch -p0 < diff
% make install
--
Yoshiyuki Asaba
y-asaba at sraoss.co.jp
-------------- next part --------------
Index: parser/parser.c
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/parser/parser.c,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 parser.c
*** parser/parser.c 8 Sep 2006 03:36:42 -0000 1.1.1.1
--- parser/parser.c 12 Oct 2007 05:13:44 -0000
***************
*** 20,25 ****
--- 20,26 ----
*/
#include <string.h>
+ #include "pool_parser.h"
#include "pool_memory.h"
#include "gramparse.h"
#include "gram.h"
***************
*** 27,32 ****
--- 28,34 ----
#include "value.h"
List *parsetree; /* result of parsing is left here */
+ jmp_buf jmpbuffer;
static int lookahead_token; /* one-token lookahead */
static bool have_lookahead; /* lookahead_token set? */
***************
*** 50,62 ****
scanner_init(str);
parser_init();
! yyresult = yyparse();
!
! scanner_finish();
! if (yyresult) /* error */
! return NIL;
return parsetree;
}
--- 52,71 ----
scanner_init(str);
parser_init();
! if (setjmp(jmpbuffer) != 0)
! {
! scanner_finish();
! return NIL; /* error */
! }
! else
! {
! yyresult = yyparse();
! scanner_finish();
+ if (yyresult) /* error */
+ return NIL;
+ }
return parsetree;
}
Index: parser/pool_parser.h
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/parser/pool_parser.h,v
retrieving revision 1.2
diff -c -r1.2 pool_parser.h
*** parser/pool_parser.h 17 May 2007 06:46:02 -0000 1.2
--- parser/pool_parser.h 12 Oct 2007 05:13:44 -0000
***************
*** 2,7 ****
--- 2,10 ----
#define POOL_PARSER_H
#include "../pool_type.h"
+ #include <setjmp.h>
+
+ extern jmp_buf jmpbuffer;
/* integer */
typedef signed int int32;
Index: parser/scan.l
===================================================================
RCS file: /cvsroot/pgpool/pgpool-II/parser/scan.l,v
retrieving revision 1.1.1.1
diff -c -r1.1.1.1 scan.l
*** parser/scan.l 8 Sep 2006 03:36:48 -0000 1.1.1.1
--- parser/scan.l 12 Oct 2007 05:13:45 -0000
***************
*** 34,39 ****
--- 34,40 ----
#include <unistd.h>
#include <errno.h>
#include <string.h>
+ #include <setjmp.h>
#define ereport(a,b)
***************
*** 742,748 ****
void
yyerror(const char *message)
{
! /* do nothing */
}
--- 743,749 ----
void
yyerror(const char *message)
{
! longjmp(jmpbuffer, 1);
}
More information about the Pgpool-general
mailing list