Release the proxy buffer object on the last release of the proxy's outer
unknown, otherwise memory is leaked for the Ndr implementation of
IRpcProxyBuffer.
Fix up the hand-coded proxies to match the behaviour from the Ndr
implementation.
Change stub manager to track the number of normal marshals instead of
using the state machine so that multiple marshals of the same object
and interface work correctly.
to proxies, causing potential deadlock issues and performance
problems.
- Add a test for this situation and remove the todo_wine from another
test that now succeeds.
pointing to the completely wrong object when a proxy does a
queryinterface.
- Remove assumption that the stub buffer will handle the lifetime of
the object.
- Fix more places where custom header size was calculated exclusive of
the data size member.
- Optimize custom marshaling by getting size before calling the custom
marshaler so we can write the header before and not use a second
stream.
- Move the modal loop called during RPCs into CoWaitForMultipleHandles.
- Use a mutex for long remoting calls to IRemUnknown methods.
- Remove locking in apartment_disconnectproxies as it is not needed.
- Use PostMessage instead of SendMessage so we can run the message
loop or not as appropriate.
- Rename register_ifstub to marshal_object to more accurately describe
what it does.
- Add new function, apartment_getoxid, to prepare for a possible
future patch where remoting is started on demand.
the apartment structure.
- Don't pass an IPID by value for proxy_manager_create_ifproxy.
- Disable more of RPC_UnregisterInterface to prevent the RPC runtime
using freed memory.
- Rename various external RPC backend functions so that they all have
the same "RPC_" prefix.
- Reduce the timeout of the function that connects to a local server
to 30s, like native.
- Rework RPC dispatch layer to be simpler and not get confused by
server/client duality.
- Make threads shut down at the right time and not access freed memory
after apartment destruction.
- Rename stub_dispatch_thread to client_dispatch_thread.
- Add some more tracing
- Check return value of WaitNamedPipe.
- Change named pipe timeouts to 0.5s, which should be enough for even the slowest machines.
it yet.
- Don't release apartment on changing modes because we didn't add a
reference anywhere.
- Quieten the RPC_E_DISCONNECTED error message as it is an expected
return code.
- Treat IID_NULL the same as IID_IUnknown.
- Make tests compile on Win95 again.
- Fix copy+paste error where the test failure should be from the
CoUnmarshalInterface function.
- Change return code of CoGetPSClsid to match test result.
- Do a slight hack to make IRemUnknown proxies be added after the
proxy that uses them to stop them being used after they are
destroyed.
- Fix multiple local server connections.
show that IInternalUnknown isn't exposed.
- Implement IMultiQI on top of IRemUnknown calls.
- Silence some fixmes that occur during tests and don't give us any
useful information.
- Fix typo in class factory proxy that caused us to use the wrong
offset into the CFProxy structure, causing us to not call the
outer_unknown properly.
call any IRemUnknown functions.
- Move the low-level unmarshaling code into a new function,
unmarshal_object, so that it can be easily reused for unmarshaling
IRemUnknown.
apps depend on this.
- Don't release IRpcProxyBuffer on ifproxy destruction - the caller
will do this for us.
- Make find_proxy_manager add a reference to the proxy manager and
make proxy_manager_construct return an object with a valid
ref-count.
- Remove stray not operator to fix a memory leak / crash in
proxy_manager_destroy.
- More debug messages, especially on errors.
- Fix ref-count leak in the Class Factory proxy.
- Add a test case for IClassFactory_CreateInstance.
stub_manager and ifstub structs.
- Make stub_manager ref counted to ensure it doesn't get freed whilst
it is still being used.
- ifstubs are now freed only when the controlling stub_manager is freed.
- Rename stub_manager_ref/unref to stub_manager_ext_addref/release
respectively and make then take an unsigned long to prevent
malicious callers from passing in a negative value and corrupting
the ref count.
structure, by replacing the process id field by apartment id (OXID),
changing the users of the process id field to use the new field and
renaming the objectid field to oid.
- Fix StdMarshalImpl_UnmarshalInterface to invalidate and release its
stub when doing a same apartment marshal.
- Release channel buffer in StdMarshal_UnmarshalInterface, since we no
longer use it and the proxy should have taken a reference on it.
- Add a few comments.
Added another error message if some program tries to marshal
IOleObject.
OleCreate() should be able to use Local Servers too (it can't as of
now, just for debugging).