Commit Graph

550 Commits

Author SHA1 Message Date
Robert Shearman 95288f9148 - Move marshaling state machine into stub manager from ifstub.
- Add additional needed states for table-weak marshaling, as shown by
  tests.
- Protect external reference count from underflows/overflows.
2005-02-18 20:03:23 +00:00
Robert Shearman 2d2a39cc42 - Use I_RpcGetBuffer, instead of our own buffer routines to fix an
occasional test crash caused by heap corruption.
- Zero the memory block passed to RpcServerRegisterIfEx so we don't
  pass garbage in some of the fields we don't fill in.
- Return the correct error code from create_server and fix two handle
  leaks.
- TODO update.
2005-02-15 21:48:09 +00:00
Robert Shearman 3b59fa8fce The Global Interface Table should do table-strong marshaling instead
of normal marshaling so that an interface can be retrieved more than
one time.
2005-02-15 15:47:44 +00:00
Robert Shearman 552cc7d5b3 - Remove cruft left over from previous RPC backend implementation in
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.
2005-02-15 15:44:25 +00:00
Robert Shearman db6db7cb4c Make COM use the RPC runtime as the backend for RPC calls. Based on a
patch by Ove Kåven.
2005-02-15 15:02:49 +00:00
Robert Shearman 2ff1711487 Invoke objects in STA's in the correct thread by sending messages to
the hidden apartment window.
2005-02-14 11:50:51 +00:00
Marcus Meissner 30ed10004b Output some more informations.
Mark one global variable static.
2005-02-14 11:07:55 +00:00
Robert Shearman 403d8e23cd Make Ole tests run on Windows 95. 2005-02-14 11:01:51 +00:00
Robert Shearman 999766d31b - Implement CoDisconnectObject.
- Change CoLockObjectExternal so that it does the correct action now
  and eliminate a fair few lines of now redundant code.
- Rename OLE32_Dll{Register,Unregister}Server to
  Dll{Register,Unregister}Server.
2005-02-08 16:51:22 +00:00
Robert Shearman 514af6ce78 Move object-to-stub-manager mapping rule to register_ifstub. 2005-02-08 14:26:19 +00:00
Robert Shearman f8a2edb805 - Split up apartment creation so that the long code paths that don't
need locking no longer have locking.
- Add special cases for the threads that join apartments but can't
  increase the refcount of the apartment.
- Free TLS storage on thread destruction (including releasing the
  apartment the thread is in, if any, and so making another test
  pass).
2005-02-08 13:42:15 +00:00
Alexandre Julliard 2a46702761 Authors: Mike Hearn <mh@codeweavers.com>, Robert Shearman <rob@codeweavers.com>
- 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.
2005-02-08 12:55:26 +00:00
Robert Shearman b9aa9e0bdd - Pass the original IID to IMarshal_UnmarshalInterface and query for
the requested interface.
- Unmarshaling IID_NULL means use the IID the interface was originally
  marshaled with.
2005-02-02 19:11:23 +00:00
Robert Shearman e6afc84873 - Add code for destroying the thread-local storage data, but don't use
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.
2005-02-01 14:18:10 +00:00
Robert Shearman 9a97360eba Remove test that fails on Win98 and is not useful. 2005-01-31 11:29:41 +00:00
Robert Shearman 9dba3479c8 Release the client security objects when no longer needed (reported by
Mike McCormack).
2005-01-28 17:19:51 +00:00
Robert Shearman 9b634b97ae - More tests.
- 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.
2005-01-28 12:39:13 +00:00
Robert Shearman 41d9aef7ef - Implement CoSetProxyBlanket, CoQueryProxyBlanket and CoCopyProxy.
- Update todo list.
2005-01-28 11:27:46 +00:00
Robert Shearman 5bef770490 Give IUnknown its own ifstub to fix ref-counting and ipid storage
issues.
2005-01-27 10:39:44 +00:00
Robert Shearman 3018974ce3 - Make proxy manager use IMultiQI instead of IInternalUnknown as tests
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.
2005-01-26 21:07:05 +00:00
Robert Shearman cbbf08a7e2 - Use InterlockedIncrement for the ipid counter instead of a critical
section (suggested by Mike Hearn).
- Remove a line added by a bad merge.
- Implement RemUnkStub_Disconnect.
- Remove all of the RPC disconnect code.
2005-01-26 20:53:06 +00:00
Robert Shearman 963ac3f013 - Implement IRemUnknown.
- Use IRemUnknown for life-cycle management instead of the current
  hacks.
2005-01-26 20:42:30 +00:00
Robert Shearman ce5adcda15 - Move OLE automation interface registration to oleaut32.
- Add IRemUnknown to list of interfaces to register.
2005-01-25 19:03:30 +00:00
Robert Shearman 6e042873d5 Proxies/stubs for IRemUnknown methods, based on code written by Ove
Kåven.
2005-01-25 19:02:54 +00:00
Robert Shearman ad34f3dc5e - Generate machine-local IPIDs.
- Make pipes be uniquely identified only by their IPID.
2005-01-25 10:57:24 +00:00
Robert Shearman 6b89a92215 - Add a new flag SORFP_NOLIFETIMEMGMT to tell the proxy manager not to
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.
2005-01-24 11:24:08 +00:00
Mike Hearn 70c1c26869 Various formatting/style changes. 2005-01-21 10:15:29 +00:00
Robert Shearman 717eb8fff4 - Consolidate more stub creation details into register_ifstub.
- Replace the current wine_marshal_id structure with STDOBJREF for the
  on-the-wire format.
2005-01-20 10:35:46 +00:00
Robert Shearman 6a20b2f476 - Initialize ppv pointer in ClientIdentity_QueryInterface to NULL as
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.
2005-01-19 17:00:20 +00:00
Robert Shearman b5a10936bd Initialize clsid member to the marshaler clsid to fix custom
marshaling.
2005-01-17 19:32:25 +00:00
Robert Shearman 4c8d59dd91 Implement table marshaling. 2005-01-17 13:39:40 +00:00
Robert Shearman 5ce396f9bd - Remove obsolete structs, rearrange things to group the structs
together and to group similar functions.
- Document thread-safety of members of structs.
2005-01-14 17:20:27 +00:00
Robert Shearman ca608933dd Make proxy shutdown test succeed by releasing the channel on
disconnect.
2005-01-14 17:20:13 +00:00
Robert Shearman 0e18914481 - Add documentation for most Co* functions.
- Move several functions into different files to group them with
  similar functions.
2005-01-14 17:05:36 +00:00
Robert Shearman 6036a773e2 - The apartment reference should be held while the stub manager
reference is held.
- Fix same apartment-unmarshal detection.
2005-01-14 16:48:34 +00:00
Robert Shearman ead057c4b7 - Don't use the pipe caching code because it doesn't work correctly at
the moment.
- Always write disconnect reply packet, even in failure cases.
2005-01-14 15:59:01 +00:00
Robert Shearman a84e7d7b75 Destroy stubs on apartment shutdown. 2005-01-14 15:11:55 +00:00
Mike Hearn ba0475e738 Force context switch on chanbuf disconnect to avoid a race in the test
suite.
2005-01-14 15:11:24 +00:00
Christian Costa a010e3b3fa CoInitialize(Ex) should return S_FALSE when COM is already initialized
for the current thread.
2005-01-12 19:58:09 +00:00
Robert Shearman 452491bd03 - Document CoSetState & CoGetState.
- Rewrite them to only retrieve TLS info once.
- Remove trailing whitespace in COM_CurrentInfo.
2005-01-12 19:48:39 +00:00
Robert Shearman 2891bc53ba Remove wine_marshal_data: it is unneeded and there is no equivalent in
STDOBJREF.
2005-01-12 19:48:20 +00:00
Robert Shearman de95de1865 - Force creation of thread queue to stop PostThreadMessage from
failing.
- Remove incorrect comment.
2005-01-12 19:28:37 +00:00
Robert Shearman 89f5c8241f The way apartments are used has changed, so fix up the hacks in the
RPC code that haven't yet been updated.
2005-01-12 19:27:22 +00:00
Robert Shearman 36f482cb7d - Make MTA dynamically allocated so that proxies and other resources
are freed at the proper time.
- Changed/removed some incorrect comments regarding apartments.
2005-01-12 19:27:04 +00:00
Bill Medland 9c6de52bb2 Corrected testing for multithreaded (based upon observations by Paul
Vriens, Christian Costa and Robert Shearman).
Added TRACE for investigating OXID errors.
2005-01-11 15:45:03 +00:00
Mike McCormack 71424b80e5 Tests and fixes for StgOpenStorage. 2005-01-11 15:08:08 +00:00
Robert Shearman 68fc5f8890 Add tests for trying to unmarshal from a bad stream and for testing
what interfaces the proxy exposes.
2005-01-11 10:45:52 +00:00
Robert Shearman c353f85082 - Document how thread-safety is ensured for each member of the
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.
2005-01-11 10:45:34 +00:00
Mike McCormack 6f20133705 Test and fix a few problems with OLE storage streams. 2005-01-11 10:44:28 +00:00
Mike McCormack b146b75c27 Test and fix StgCreateDocFile grfModes. 2005-01-10 12:26:25 +00:00
Paul Vriens 202b340a51 - use Interlocked* functions in AddRef and Release.
- store the result of the Interlocked functions and use only this.
2005-01-09 17:29:21 +00:00
Eric Pouech cf1d00bb08 Removed excessive statement (break after return or goto, not useful
break, not needed vars...)
2005-01-09 16:42:53 +00:00
Robert Shearman 86d63bbbac Rename iid in wine_marshal_id to ipid and use IPIDs instead of IIDs in
the stub manager.
2005-01-07 15:33:41 +00:00
Robert Shearman 090003360f The current architecture cannot handle pipes changing address, so use
a static array. Fixes memory corruption that sometimes occurs when
using multiple pipes.
2005-01-07 15:33:26 +00:00
Robert Shearman b2edf2f03c No need to add a reference to the apartment from new_stub_manager as
we don't hold on to an apartment pointer.
2005-01-06 20:43:48 +00:00
Robert Shearman 23e390a223 - Make struct oletls ref counted so that it is only detached from the
apartment on the final CoUninitialize.
- Decrease the size of the crit sec on destroying an apartment - it is
  only needed for touching the apartment list.
- Small cleanups.
2005-01-06 19:39:07 +00:00
Robert Shearman 67bae9f213 ConnectNamedPipe returning ERROR_PIPE_CONNECTED is not an error. 2005-01-06 19:38:48 +00:00
Robert Shearman b5e4d1a8d8 The channel buffer can be NULL if the proxy is disconnected, so check
for this before releasing it.
2005-01-05 17:30:20 +00:00
Robert Shearman 9f426df0a8 - Fix race on apartment creation.
- Display errors in decimal to make searching for the meaning in
  winerror.h easier.
2005-01-05 17:30:04 +00:00
Mike Hearn a6a416cb4e - Make apartment access thread-safe by introducing refcounting and
wider usage of the apartment lock.
- Rework OLE TLS management to eliminate uninitialised apartments and
  parent chaining.
2005-01-05 17:14:33 +00:00
Mike McCormack a246306870 Allow COM to start services containing COM servers. 2005-01-05 13:22:10 +00:00
Robert Shearman 85763a1711 - Add tracing for proxy ref count functions.
- Release the channel on proxy destruction.
2005-01-04 20:33:02 +00:00
Mike Hearn 73318dab8f Add a DCOM todo list. 2005-01-04 20:32:47 +00:00
Robert Shearman 2835633789 Implement proxy manager. 2005-01-04 11:58:23 +00:00
Robert Shearman dee74a6ec9 Make the ClassFactory proxy support aggregation. 2005-01-04 11:47:52 +00:00
Michael Stefaniuc 15a308a9d7 Do not check for non NULL pointer before HeapFree'ing it. It's
redundant.
2005-01-03 14:56:42 +00:00
Mike Hearn 054f9ecc3c Comment out an assert, as we don't yet implement IRemUnknown. 2005-01-03 14:34:09 +00:00
Robert Shearman 5d7d188df5 - Move named pipe macros into rpc.c.
- Remove unneeded function.
2004-12-27 19:27:57 +00:00
Robert Shearman 2b747d4e50 Implement COM local servers using table marshaling to avoid doing the
marshaling in a child thread where COM has not been initialized.
2004-12-27 19:24:55 +00:00
Mike Hearn 5475a2e617 - Implement the COM stub manager, refactor the current stub code.
- Begin implementing interface stubs.
2004-12-27 19:21:47 +00:00
Mike Hearn 737e67b17b Propagate apartments through the intermediate threads, make listener
thread apartment scoped.
2004-12-27 16:59:28 +00:00
Michael Stefaniuc 5ad7d858e0 Do not check for non NULL pointer before HeapFree'ing it. It's
redundant.
2004-12-23 17:06:43 +00:00
Eric Pouech bcfa5b0900 ReadFile and WriteFile must be passed a parameter for the number of
handled bytes when no overlapped operation is done.
2004-12-22 18:38:31 +00:00
Robert Shearman 827154e451 Add tests for moniker and marshaling functions. 2004-12-21 14:51:27 +00:00
Francois Gouget 6fb1a20020 Assorted spelling fixes. 2004-12-20 19:27:06 +00:00
Ge van Geldorp b4bb1c931c Allocate correct amount of memory. 2004-12-16 14:23:16 +00:00
Robert Shearman 9fdd91fdc4 - Add documentation to several functions.
- Coding style changes according to the style Mike and I have agreed
  upon for COM related files.
2004-12-14 15:31:05 +00:00
Robert Shearman 2fa9a0a6fd Remove unneeded includes and the unused COMPOBJ_hInstance32 variable. 2004-12-14 15:28:58 +00:00
Robert Shearman 40b4f7f6e6 Use OBJREF on the wire for generic marshaling functions. 2004-12-14 15:14:40 +00:00
Robert Shearman 398a595377 Fixed incorrect unsigned test. 2004-12-14 11:35:12 +00:00
Eric Pouech 4056d7ef8c Fixed some errors in function prototypes. 2004-12-13 21:19:01 +00:00
Alexandre Julliard ebe3c529b1 Janitorial: C booleans must not be compared against TRUE. 2004-12-09 14:07:59 +00:00
Robert Shearman 2c3de6db24 - Make the wine_marshal_id structure more like the DCOM OBJREF
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.
2004-12-08 17:49:30 +00:00
Mike Hearn 36aee71988 Rename the STUBMGR thread to more accurately reflect its purpose. 2004-12-07 17:01:40 +00:00
Robert Shearman cba8763c33 Remove unnecessary WNDPROC casts. 2004-12-06 11:51:29 +00:00
Robert Shearman 3b0a5d0a06 - Add some function declarations to objbase.h.
- Add stubs for server ref counting.
- Implement HRESULT marshaling.
2004-12-01 15:33:34 +00:00
Eric Pouech 0a258964c2 Const correctness fixes. 2004-11-30 21:38:57 +00:00
Mike Hearn b547af156b Trace the OLE error info strings. 2004-11-29 17:00:39 +00:00
Mike Hearn a153efc5bb - Improve OLE function documentation.
- Bail out with CO_E_NOTINITIALIZED when apt is null.
2004-11-29 17:00:15 +00:00
Robert Shearman aa758eaf82 Implement OleDuplicateData. 2004-11-24 18:12:06 +00:00
Alexandre Julliard 405568801e Removed a couple of no longer needed entries. 2004-11-19 18:28:05 +00:00
Ge van Geldorp b3f2c53155 Use only one .res file. 2004-10-27 00:47:53 +00:00
Dmitry Timoshkov c41d0c9a4b - Remove bogus use of nStatCounter and hOleAut32 in CoSetState.
- Remove a comment about protecting per thread data by a critical section.
2004-10-25 21:48:44 +00:00
Francois Gouget 3bb5b093e8 Assorted spelling fixes. 2004-10-22 22:27:51 +00:00
Vincent Béron 4eeae1adb3 Fix some types problems. 2004-10-18 22:39:21 +00:00
Robert Shearman 0fb8f4a15e Improve proxy destruction comment. 2004-10-18 19:34:51 +00:00
Francois Gouget 486d020c1b Don't define COBJMACROS in objbase.h.
Update the Wine sources accordingly.
2004-10-07 03:06:48 +00:00
Francois Gouget 67aa858a31 Assorted spelling fixes. 2004-10-05 18:15:29 +00:00
Alexandre Julliard 739e5b06da Avoid depending on the non-standard IUnknown_METHODS macro in Wine
internal headers.
2004-10-05 04:16:21 +00:00
Joris Huizer 34cffce6f9 Ref count increment/decrement cleanup. 2004-09-24 01:16:53 +00:00