[pgpool-general-jp: 79] Re: pgpoolのprepared_listについて
Kenichi Sawada
k @ sawada.cc
2007年 1月 22日 (月) 19:54:32 JST
澤田です。
浅羽さん、パッチありがとうございます。御返信遅くなり申し訳ありません。
パッチの中で気になった点がありまして、
*** 2732,2738 ****
{
if (stmt->portal_name)
free(stmt->portal_name);
! stmt->portal_name = strdup(portal_name);
}
}
--- 2730,2736 ----
{
if (stmt->portal_name)
free(stmt->portal_name);
! stmt->portal_name = strdup(stmt->portal_name);
}
}
***************
この部分がちょっと良く判らなかったのですが、strdupの対象は
stmt->portal_nameの方がよいのでしょうか?
また、頂いたパッチで前回お送りしたPerlスクリプトを実行すると
*** glibc detected *** double free or corruption (faststop): 0xxxxxxxxx ***
というエラーが出てしまうようです。
これは恐らく2726行目あたりの
if (stmt == NULL)
free(name);
else if (*portal_name == '\0')
のfreeでエラーが発生しているものと思われますが、
(微妙によくわかっていないのですが
2727行目のfree(name)はどういう場合に必要になるのでしょうか。。?)
遡ると2720〜2721行目のsprintfとlookup_prepared_statement_by_statementが
悪さをしているようです。
可能であれば、正規化はprepared_listに登録/削除する直前、並びにlookupする直前
に行うのがよいかと思いますが、いかがでしょうか?
御検討頂ければと存じます。どうぞ宜しくお願い致します。
--澤田 研一
--k @ sawada.cc
From: Yoshiyuki Asaba <y-asaba @ sraoss.co.jp>
Subject: [pgpool-general-jp: 74] Re: pgpoolのprepared_listについて
Date: Fri, 12 Jan 2007 19:29:41 +0900 (JST)
> 浅羽です。
>
> From: Kenichi Sawada <k @ sawada.cc>
> Subject: [pgpool-general-jp: 71] pgpoolのprepared_listについて
> Date: Fri, 12 Jan 2007 17:31:18 +0900 (JST)
>
> > さて、PostgreSQL-8.1.4, Perl-5.8.5, DBI-1.51, DBD-Pg-1.49 という環境にて、
> > pgpool-3.1.1 をport 9999上で動作させている状況で、
> > create testdbとしてtestdbを作成してリスト1のスクリプトを実行させると、
> > PostgreSQL側に
> > ERROR: prepared statement "dbdpg_1" does not exist
> > というエラーログが出るようです(ログ1:PostgreSQL側ログをご参照ください)
> >
> > これはpool_process_query.cの中でextended queryのstatement_nameについて
> > 常に二重引用符を付加しているために発生する現象ではないかと思いますが、
> > これは末尾Patch for 3.1.1のようにして回避しても問題ないものでしょう
> > か?
>
> パッチありがとうございます。JDBC ドライバを使ったテストしかしていなかっ
> たため、開発中には気付きませんでした…。
>
> パッチですが、
>
> prepare a as select 1;
>
> という prepared statement があった場合に、
>
> deallocate a;
> deallocate "a";
> deallocate A;
>
> というクエリに対応しないといけないため、少し手を加えてみました。こちら
> でいかがでしょうか?
>
> --
> Yoshiyuki Asaba
> y-asaba @ sraoss.co.jp
pgpool-general-jp メーリングリストの案内