]> granicus.if.org Git - php/commitdiff
Allow COM to build under non-zts.
authorWez Furlong <wez@php.net>
Sat, 31 Jul 2004 17:27:03 +0000 (17:27 +0000)
committerWez Furlong <wez@php.net>
Sat, 31 Jul 2004 17:27:03 +0000 (17:27 +0000)
Thanks Frank.

ext/com_dotnet/com_persist.c
ext/com_dotnet/com_wrapper.c

index d9ba2aa350484932cc215413cbb6b15aa02d7abd..70f3d89ad1b2ac53c671af7758f159af225da268 100755 (executable)
@@ -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;
index d07ec8668895c577e0eff95cfbf1f5552c7ab760..eb1564900b262e5a88ce738ffe22f9bbae785c27 100644 (file)
@@ -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;