From: Wez Furlong Date: Sat, 31 Jul 2004 17:27:03 +0000 (+0000) Subject: Allow COM to build under non-zts. X-Git-Tag: PRE_ZEND_VM_DISPATCH_PATCH~293 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=d4ad4ac3703cb2ee9e8b5166981bce4767cdc8cd;p=php Allow COM to build under non-zts. Thanks Frank. --- diff --git a/ext/com_dotnet/com_persist.c b/ext/com_dotnet/com_persist.c index d9ba2aa350..70f3d89ad1 100755 --- a/ext/com_dotnet/com_persist.c +++ b/ext/com_dotnet/com_persist.c @@ -38,7 +38,7 @@ typedef struct { CONST_VTBL struct IStreamVtbl *lpVtbl; - THREAD_T engine_thread; + DWORD engine_thread; LONG refcount; php_stream *stream; int id; @@ -53,17 +53,23 @@ static void istream_dtor(zend_rsrc_list_entry *rsrc TSRMLS_DC) istream_destructor(stm); } +#ifdef ZTS +# define TSRMLS_FIXED() TSRMLS_FETCH(); +#else +# define TSRMLS_FIXED() +#endif + #define FETCH_STM() \ + TSRMLS_FIXED() \ php_istream *stm = (php_istream*)This; \ - if (tsrm_thread_id() != stm->engine_thread) \ - return E_UNEXPECTED; + if (GetCurrentThreadId() != stm->engine_thread) \ + return RPC_E_WRONG_THREAD; static HRESULT STDMETHODCALLTYPE stm_queryinterface( IStream *This, /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject) { - TSRMLS_FETCH(); FETCH_STM(); if (IsEqualGUID(&IID_IUnknown, riid) || @@ -79,7 +85,6 @@ static HRESULT STDMETHODCALLTYPE stm_queryinterface( static ULONG STDMETHODCALLTYPE stm_addref(IStream *This) { - TSRMLS_FETCH(); FETCH_STM(); return InterlockedIncrement(&stm->refcount); @@ -88,7 +93,6 @@ static ULONG STDMETHODCALLTYPE stm_addref(IStream *This) static ULONG STDMETHODCALLTYPE stm_release(IStream *This) { ULONG ret; - TSRMLS_FETCH(); FETCH_STM(); ret = InterlockedDecrement(&stm->refcount); @@ -103,7 +107,6 @@ static ULONG STDMETHODCALLTYPE stm_release(IStream *This) static HRESULT STDMETHODCALLTYPE stm_read(IStream *This, void *pv, ULONG cb, ULONG *pcbRead) { int nread; - TSRMLS_FETCH(); FETCH_STM(); nread = php_stream_read(stm->stream, pv, cb); @@ -120,7 +123,6 @@ static HRESULT STDMETHODCALLTYPE stm_read(IStream *This, void *pv, ULONG cb, ULO static HRESULT STDMETHODCALLTYPE stm_write(IStream *This, void const *pv, ULONG cb, ULONG *pcbWritten) { int nwrote; - TSRMLS_FETCH(); FETCH_STM(); nwrote = php_stream_write(stm->stream, pv, cb); @@ -140,7 +142,6 @@ static HRESULT STDMETHODCALLTYPE stm_seek(IStream *This, LARGE_INTEGER dlibMove, off_t offset; int whence; int ret; - TSRMLS_FETCH(); FETCH_STM(); switch (dwOrigin) { @@ -169,7 +170,6 @@ static HRESULT STDMETHODCALLTYPE stm_seek(IStream *This, LARGE_INTEGER dlibMove, static HRESULT STDMETHODCALLTYPE stm_set_size(IStream *This, ULARGE_INTEGER libNewSize) { - TSRMLS_FETCH(); FETCH_STM(); if (libNewSize.HighPart) { @@ -190,7 +190,6 @@ static HRESULT STDMETHODCALLTYPE stm_set_size(IStream *This, ULARGE_INTEGER libN static HRESULT STDMETHODCALLTYPE stm_copy_to(IStream *This, IStream *pstm, ULARGE_INTEGER cb, ULARGE_INTEGER *pcbRead, ULARGE_INTEGER *pcbWritten) { - TSRMLS_FETCH(); FETCH_STM(); return E_NOTIMPL; @@ -198,7 +197,6 @@ static HRESULT STDMETHODCALLTYPE stm_copy_to(IStream *This, IStream *pstm, ULARG static HRESULT STDMETHODCALLTYPE stm_commit(IStream *This, DWORD grfCommitFlags) { - TSRMLS_FETCH(); FETCH_STM(); php_stream_flush(stm->stream); @@ -281,7 +279,7 @@ PHPAPI IStream *php_com_wrapper_export_stream(php_stream *stream TSRMLS_DC) return NULL; memset(stm, 0, sizeof(*stm)); - stm->engine_thread = tsrm_thread_id(); + stm->engine_thread = GetCurrentThreadId(); stm->lpVtbl = &php_istream_vtbl; stm->refcount = 1; stm->stream = stream; diff --git a/ext/com_dotnet/com_wrapper.c b/ext/com_dotnet/com_wrapper.c index d07ec86688..eb1564900b 100644 --- a/ext/com_dotnet/com_wrapper.c +++ b/ext/com_dotnet/com_wrapper.c @@ -38,7 +38,7 @@ typedef struct { /* now the PHP stuff */ - THREAD_T engine_thread; /* for sanity checking */ + DWORD engine_thread; /* for sanity checking */ zval *object; /* the object exported */ LONG refcount; /* COM reference count */ @@ -74,7 +74,7 @@ static inline void trace(char *fmt, ...) va_list ap; char buf[4096]; - sprintf(buf, "T=%08x ", tsrm_thread_id()); + sprintf(buf, "T=%08x ", GetCurrentThreadId()); OutputDebugString(buf); va_start(ap, fmt); @@ -86,10 +86,17 @@ static inline void trace(char *fmt, ...) } /* }}} */ +#ifdef ZTS +# define TSRMLS_FIXED() TSRMLS_FETCH(); +#else +# define TSRMLS_FIXED() +#endif + #define FETCH_DISP(methname) \ + TSRMLS_FIXED() \ php_dispatchex *disp = (php_dispatchex*)This; \ trace(" PHP:%s %s\n", Z_OBJCE_P(disp->object)->name, methname); \ - if (tsrm_thread_id() != disp->engine_thread) \ + if (GetCurrentThreadId() != disp->engine_thread) \ return RPC_E_WRONG_THREAD; @@ -98,8 +105,6 @@ static HRESULT STDMETHODCALLTYPE disp_queryinterface( /* [in] */ REFIID riid, /* [iid_is][out] */ void **ppvObject) { - TSRMLS_FETCH(); - FETCH_DISP("QueryInterface"); if (IsEqualGUID(&IID_IUnknown, riid) || @@ -117,8 +122,6 @@ static HRESULT STDMETHODCALLTYPE disp_queryinterface( static ULONG STDMETHODCALLTYPE disp_addref(IDispatchEx *This) { - TSRMLS_FETCH(); - FETCH_DISP("AddRef"); return InterlockedIncrement(&disp->refcount); @@ -127,8 +130,6 @@ static ULONG STDMETHODCALLTYPE disp_addref(IDispatchEx *This) static ULONG STDMETHODCALLTYPE disp_release(IDispatchEx *This) { ULONG ret; - TSRMLS_FETCH(); - FETCH_DISP("Release"); ret = InterlockedDecrement(&disp->refcount); @@ -145,8 +146,6 @@ static HRESULT STDMETHODCALLTYPE disp_gettypeinfocount( IDispatchEx *This, /* [out] */ UINT *pctinfo) { - TSRMLS_FETCH(); - FETCH_DISP("GetTypeInfoCount"); *pctinfo = 0; @@ -159,8 +158,6 @@ static HRESULT STDMETHODCALLTYPE disp_gettypeinfo( /* [in] */ LCID lcid, /* [out] */ ITypeInfo **ppTInfo) { - TSRMLS_FETCH(); - FETCH_DISP("GetTypeInfo"); *ppTInfo = NULL; @@ -177,8 +174,6 @@ static HRESULT STDMETHODCALLTYPE disp_getidsofnames( { UINT i; HRESULT ret = S_OK; - TSRMLS_FETCH(); - FETCH_DISP("GetIDsOfNames"); for (i = 0; i < cNames; i++) { @@ -229,8 +224,6 @@ static HRESULT STDMETHODCALLTYPE disp_getdispid( char *name; unsigned int namelen; zval **tmp; - TSRMLS_FETCH(); - FETCH_DISP("GetDispID"); name = php_com_olestring_to_string(bstrName, &namelen, COMG(code_page) TSRMLS_CC); @@ -264,8 +257,6 @@ static HRESULT STDMETHODCALLTYPE disp_invokeex( zval *retval = NULL; zval ***params = NULL; HRESULT ret = DISP_E_MEMBERNOTFOUND; - TSRMLS_FETCH(); - FETCH_DISP("InvokeEx"); if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) { @@ -351,8 +342,6 @@ static HRESULT STDMETHODCALLTYPE disp_deletememberbyname( /* [in] */ BSTR bstrName, /* [in] */ DWORD grfdex) { - TSRMLS_FETCH(); - FETCH_DISP("DeleteMemberByName"); /* TODO: unset */ @@ -364,8 +353,6 @@ static HRESULT STDMETHODCALLTYPE disp_deletememberbydispid( IDispatchEx *This, /* [in] */ DISPID id) { - TSRMLS_FETCH(); - FETCH_DISP("DeleteMemberByDispID"); /* TODO: unset */ @@ -379,8 +366,6 @@ static HRESULT STDMETHODCALLTYPE disp_getmemberproperties( /* [in] */ DWORD grfdexFetch, /* [out] */ DWORD *pgrfdex) { - TSRMLS_FETCH(); - FETCH_DISP("GetMemberProperties"); return DISP_E_UNKNOWNNAME; @@ -392,8 +377,6 @@ static HRESULT STDMETHODCALLTYPE disp_getmembername( /* [out] */ BSTR *pbstrName) { zval *name; - TSRMLS_FETCH(); - FETCH_DISP("GetMemberName"); if (SUCCESS == zend_hash_index_find(disp->dispid_to_name, id, (void**)&name)) { @@ -413,8 +396,6 @@ static HRESULT STDMETHODCALLTYPE disp_getnextdispid( /* [out] */ DISPID *pid) { ulong next = id+1; - TSRMLS_FETCH(); - FETCH_DISP("GetNextDispID"); while(!zend_hash_index_exists(disp->dispid_to_name, next)) @@ -431,8 +412,6 @@ static HRESULT STDMETHODCALLTYPE disp_getnamespaceparent( IDispatchEx *This, /* [out] */ IUnknown **ppunk) { - TSRMLS_FETCH(); - FETCH_DISP("GetNameSpaceParent"); *ppunk = NULL; @@ -549,7 +528,7 @@ static php_dispatchex *disp_constructor(zval *object TSRMLS_DC) memset(disp, 0, sizeof(php_dispatchex)); - disp->engine_thread = tsrm_thread_id(); + disp->engine_thread = GetCurrentThreadId(); disp->lpVtbl = &php_dispatch_vtbl; disp->refcount = 1;