Re: NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec
От | Inoue, Hiroshi |
---|---|
Тема | Re: NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec |
Дата | |
Msg-id | 539B1E51.10008@tpf.co.jp обсуждение исходный текст |
Ответ на | NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec (Craig Ringer <craig@2ndquadrant.com>) |
Ответы |
Re: NPE in psqlodbc30a.dll!PgDtc_set_property caused by pgendlista.dll!IAsyncPG::RequestExec
|
Список | 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 по дате отправления: