Commit 487c691d authored by Huw Davies's avatar Huw Davies Committed by Alexandre Julliard

rpcrt4: Tests for CStdStubBuffer_Disconnect and a tidy up of the implementation.

parent f42f727f
...@@ -150,12 +150,13 @@ HRESULT WINAPI CStdStubBuffer_Connect(LPRPCSTUBBUFFER iface, ...@@ -150,12 +150,13 @@ HRESULT WINAPI CStdStubBuffer_Connect(LPRPCSTUBBUFFER iface,
void WINAPI CStdStubBuffer_Disconnect(LPRPCSTUBBUFFER iface) void WINAPI CStdStubBuffer_Disconnect(LPRPCSTUBBUFFER iface)
{ {
CStdStubBuffer *This = (CStdStubBuffer *)iface; CStdStubBuffer *This = (CStdStubBuffer *)iface;
IUnknown *old;
TRACE("(%p)->Disconnect()\n",This); TRACE("(%p)->Disconnect()\n",This);
if (This->pvServerObject)
{ old = InterlockedExchangePointer((void**)&This->pvServerObject, NULL);
IUnknown_Release(This->pvServerObject);
This->pvServerObject = NULL; if(old)
} IUnknown_Release(old);
} }
HRESULT WINAPI CStdStubBuffer_Invoke(LPRPCSTUBBUFFER iface, HRESULT WINAPI CStdStubBuffer_Invoke(LPRPCSTUBBUFFER iface,
......
...@@ -703,6 +703,19 @@ static void test_Connect(IPSFactoryBuffer *ppsf) ...@@ -703,6 +703,19 @@ static void test_Connect(IPSFactoryBuffer *ppsf)
ok(connect_test_orig_release_called == 2, "release called %d\n", connect_test_orig_release_called); ok(connect_test_orig_release_called == 2, "release called %d\n", connect_test_orig_release_called);
} }
static void test_Disconnect(IPSFactoryBuffer *ppsf)
{
IUnknownVtbl *orig_vtbl = &connect_test_orig_vtbl;
IUnknown *obj = (IUnknown*)&orig_vtbl;
IRpcStubBuffer *pstub = create_stub(ppsf, &IID_if1, obj, S_OK);
CStdStubBuffer *cstd_stub = (CStdStubBuffer*)pstub;
connect_test_orig_release_called = 0;
IRpcStubBuffer_Disconnect(pstub);
ok(connect_test_orig_release_called == 1, "release called %d\n", connect_test_orig_release_called);
ok(cstd_stub->pvServerObject == NULL, "pvServerObject %p\n", cstd_stub->pvServerObject);
}
START_TEST( cstub ) START_TEST( cstub )
{ {
IPSFactoryBuffer *ppsf; IPSFactoryBuffer *ppsf;
...@@ -713,6 +726,7 @@ START_TEST( cstub ) ...@@ -713,6 +726,7 @@ START_TEST( cstub )
test_NdrStubForwardingFunction(); test_NdrStubForwardingFunction();
test_CreateStub(ppsf); test_CreateStub(ppsf);
test_Connect(ppsf); test_Connect(ppsf);
test_Disconnect(ppsf);
OleUninitialize(); OleUninitialize();
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment