I don't see how this change would help. The call that crashes Eclipse is Secur32.INSTANCE.FreeCredentialsHandle(clientCred); which never returns. It crashes only when the call is made from inside GC when garbage collection is in progress. I am wondering if this has anything to do with threading. Wild guess.
For right now I have extended the WindowsNegotiateSchemeFactory to hold all the references to created WindowsNegotiateScheme's until my client is closed. This way they are not garbage-collected, but this is obviously not the proper way to handle these things. From: Gary Gregory <garydgreg...@gmail.com> To: HttpClient User Discussion <httpclient-users@hc.apache.org>; Alexander Bernstein <alexbernstein1...@yahoo.com> Sent: Thursday, August 27, 2015 12:58 PM Subject: Re: GPF in WindowsNegotiateScheme.dispose() I'm wondering if WindowsNegotiateScheme.dispose() should be more defensive. But how? We now have: public void dispose() { if (clientCred != null && !clientCred.isNull()) { final int rc = Secur32.INSTANCE.FreeCredentialsHandle(clientCred); // BOMBS HERE if (WinError.SEC_E_OK != rc) { throw new Win32Exception(rc); } } if (sspiContext != null && !sspiContext.isNull()) { final int rc = Secur32.INSTANCE.DeleteSecurityContext(sspiContext); if (WinError.SEC_E_OK != rc) { throw new Win32Exception(rc); } } continueNeeded = true; // waiting clientCred = null; sspiContext = null; } Maybe this would help in some edge cases: Index: src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java =================================================================== --- src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java (revision 1698005) +++ src/main/java/org/apache/http/impl/auth/win/WindowsNegotiateScheme.java (working copy) @@ -97,6 +97,7 @@ public void dispose() { if (clientCred != null && !clientCred.isNull()) { final int rc = Secur32.INSTANCE.FreeCredentialsHandle(clientCred); + clientCred = null; if (WinError.SEC_E_OK != rc) { throw new Win32Exception(rc); } @@ -103,6 +104,7 @@ } if (sspiContext != null && !sspiContext.isNull()) { final int rc = Secur32.INSTANCE.DeleteSecurityContext(sspiContext); + sspiContext = null; if (WinError.SEC_E_OK != rc) { throw new Win32Exception(rc); } ? Gary On Wed, Aug 26, 2015 at 1:07 PM, Alexander Bernstein < alexbernstein1...@yahoo.com.invalid> wrote: > Hello, > I am new here, please pardon if this is not the right place for this kind > of question. > I am using httpclient-win-4.5 from httpClient 4.5 and > jna-4.1.0/jna-platform-4.1.0 JNA libraries to authenticate to Kerberos > server from Eclipse-based application. > I create my client from WinHttpClients.custom(). The authentication is > successful, but sooner or later, when JVM calls > WindowsNegotiateScheme.dispose() my Eclipse crashes with GPF. > I noticed that WindowsNegotiateSchemeFactory.create() is called twice, for > some reason. Not sure if this is a normal flow and/or is relevant to the > problem. > > 1XMCURTHDINFO Current thread > NULL ---------------------- > 3XMTHREADINFO "Finalizer thread" J9VMThread:0x0000000003FD1B00, > j9thread_t:0x00000000050C1F10, java/lang/Thread:0x000007FFDE5E2800, > state:R, prio=5 > 3XMJAVALTHREAD (java/lang/Thread getId:0x15, isDaemon:true) > 3XMTHREADINFO1 (native thread ID:0xCBC, native priority:0x5, > native policy:UNKNOWN, vmstate:R, vm thread flags:0x00000000) > 3XMTHREADINFO3 Java callstack: > 4XESTACKTRACE at com/sun/jna/Native.setPointer(Native > Method) > 4XESTACKTRACE at > com/sun/jna/Pointer.setPointer(Pointer.java:1195) > 4XESTACKTRACE at > com/sun/jna/Memory.setPointer(Memory.java:658) > 4XESTACKTRACE at > com/sun/jna/Pointer.setValue(Pointer.java:937) > 4XESTACKTRACE at > com/sun/jna/Structure.writeField(Structure.java:800) > 4XESTACKTRACE at > com/sun/jna/Structure.write(Structure.java:718(Compiled Code)) > 4XESTACKTRACE at > com/sun/jna/Structure.autoWrite(Structure.java:1923(Compiled Code)) > 4XESTACKTRACE at > com/sun/jna/Function.convertArgument(Function.java:505(Compiled Code)) > 4XESTACKTRACE at > com/sun/jna/Function.invoke(Function.java:297(Compiled Code)) > 4XESTACKTRACE at > com/sun/jna/Library$Handler.invoke(Library.java:212) > 4XESTACKTRACE at > com/sun/proxy/$Proxy13.FreeCredentialsHandle(Bytecode PC:18) > 4XESTACKTRACE at > org/apache/http/impl/auth/win/WindowsNegotiateScheme.dispose(WindowsNegotiateScheme.java:99) > 4XESTACKTRACE at > org/apache/http/impl/auth/win/WindowsNegotiateScheme.finalize(WindowsNegotiateScheme.java:117) > 4XESTACKTRACE at > java/lang/J9VMInternals.runFinalize(J9VMInternals.java:436) > 3XMTHREADINFO3 No native callstack available on this platform > NULL > Appreciate any help and suggestions.Thank you > Alex Bernstein -- E-Mail: garydgreg...@gmail.com | ggreg...@apache.org Java Persistence with Hibernate, Second Edition <http://www.manning.com/bauer3/> JUnit in Action, Second Edition <http://www.manning.com/tahchiev/> Spring Batch in Action <http://www.manning.com/templier/> Blog: http://garygregory.wordpress.com Home: http://garygregory.com/ Tweet! http://twitter.com/GaryGregory