Re: NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec - Mailing list pgsql-odbc

From Inoue, Hiroshi
Subject Re: NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec
Date
Msg-id 539B1E51.10008@tpf.co.jp
Whole thread Raw
In response to NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec  (Craig Ringer <craig@2ndquadrant.com>)
Responses Re: NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec  (Craig Ringer <craig@2ndquadrant.com>)
List pgsql-odbc
Hi Craig,

(2014/06/13 14:40), Craig Ringer wrote:
> Hi folks
>
> I've been chasing an NPE in psqlODBC while attempting to run a debug
> build to help identify an MSDTC / XA issue for a customer.
>
> In pgenlista.dll, IAsyncPG::RequestExec calls SetDone(...), which clears
> the IAsyncPG::dtcconn member. It then calls PgDtc_set_property on the
> just-cleared dtcconn member, causing an NPE.

Oops you are right.
Anyway it would take some time to fix it.
I would have to remember the code first.

Thanks.
Hiroshi Inoue

> in msdtc_enlist.cpp:
>
>   if (S_OK != res)
>   {
>       SetDone(res);
>       bReleaseEnlist = true;
>   }
>   PgDtc_set_property(dtcconn, prepareRequested, (void *) 0);
>
>
> At the entry point to IAsyncPG::RequestExec, res == S_OK . It gets set
> to S_FAIL at:
>
>      if (!PgDtc_two_phase_operation(econn, PREPARE_TRANSACTION, pgxid))
>          res = E_FAIL;
>
> on line 637. I'll look into why that's failing in my environment, but
> meanwhile, any attempt to access 'dtcconn' after clearing it is clearly
> a bug.
>
> Presumably the PgDtc_set_property should be done before SetDone, or in
> an else {} .


pgsql-odbc by date:

Previous
From: Craig Ringer
Date:
Subject: Re: Building psqlODBC installers
Next
From: "Inoue, Hiroshi"
Date:
Subject: Re: Building psqlODBC installers