From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 13576 invoked by alias); 29 Nov 2006 11:09:54 -0000 Received: (qmail 13529 invoked by uid 22791); 29 Nov 2006 11:09:49 -0000 X-Spam-Check-By: sourceware.org Received: from moutng.kundenserver.de (HELO moutng.kundenserver.de) (212.227.126.177) by sourceware.org (qpsmtpd/0.31) with ESMTP; Wed, 29 Nov 2006 11:09:40 +0000 Received: from [84.154.161.39] (helo=[192.168.1.20]) by mrelayeu.kundenserver.de (node=mrelayeu6) with ESMTP (Nemesis), id 0ML29c-1GpNJo1vLZ-0008T7; Wed, 29 Nov 2006 12:09:37 +0100 Message-ID: <456D6AEC.8070804@marcelruff.info> Date: Wed, 29 Nov 2006 11:09:00 -0000 From: Marcel Ruff User-Agent: Thunderbird 1.5.0.8 (X11/20061025) MIME-Version: 1.0 To: pthreads-win32@sources.redhat.com Subject: Re: Patch of current cvs for WinCE References: <456C62A1.9090202@marcelruff.info> <456C63DC.4010008@marcelruff.info> In-Reply-To: <456C63DC.4010008@marcelruff.info> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes Mailing-List: contact pthreads-win32-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: pthreads-win32-owner@sourceware.org X-SW-Source: 2006/txt/msg00065.txt.bz2 Thank you Sinan, the setting PTW32_INTERLOCKED_COMPARE_EXCHANGE to InterlockedCompareExchange in implement.h fixed the EBUSY returns. Below is the complete patch for the Windows CE port to be applied on the CVS from 2006-11-29 9:00. pthreads for Windows CE on ARM seems to work stable now, my xmlBlaster.org C client just processed 100000 messages with a lot of pthreads activity. Is it possible to integrate the patch to the main trunk for release 2.8? The defines to be used for compilation are /DWINCE /D_ARM_ which are automatically set by VC++8 for the Smartphone 2003 ARMV4 target. Unclear is still: 1. What do i have to return in pthread_cancel.c instead of FpExc?? #if defined(WINCE) # define PTW32_PROGCTR(Context) ((Context).FpExc) #endif (see Context struct below). 2. What are usefull errno returns regards Marcel Marcel Ruff wrote: > Marcel Ruff wrote: >> Hi, >> >> with some minor changes the pthreads CVS snapshot from >> today (2006-11-28 PTW32_VERSION 2,8,0,0) compiles with >> >> Visual C++ 8.0.5 2005 (on a XP) >> >> for the target >> >> Windows CE 4.2, Smartphone 2003 with ARM4 processor. >> >> My multi threaded application seem to run fine, but >> it keeps getting strange return codes for >> >> pthread_cond_destroy() >> pthread_mutex_destroy() >> >> those calls return 16 (which is EBUSY) in need_errno.h. >> I ignore it and my applications continues as expected. >> >> Most probably this (my) hack is the reason: >> >> What do i have to return in pthread_cancel.c instead of FpExc?? >> 43a44,47 >> > #if defined(WINCE) >> > #define PTW32_PROGCTR(Context) ((Context).FpExc) >> > #endif >> (Context is defined in my winnt.h) > Here it is: C:\Program Files\Microsoft Visual Studio > 8\SmartDevices\SDK\Smartphone2003\Include\winnt.h > ... > typedef struct _CONTEXT { > // > // The flags values within this flag control the contents of > // a CONTEXT record. > // > // If the context record is used as an input parameter, then > // for each portion of the context record controlled by a flag > // whose value is set, it is assumed that that portion of the > // context record contains valid context. If the context record > // is being used to modify a thread's context, then only that > // portion of the threads context will be modified. > // > // If the context record is used as an IN OUT parameter to capture > // the context of a thread, then only those portions of the thread's > // context corresponding to set flags will be returned. > // > // The context record is never used as an OUT only parameter. > // > > ULONG ContextFlags; > > // > // This section is specified/returned if the ContextFlags word > contains > // the flag CONTEXT_INTEGER. > // > ULONG R0; > ULONG R1; > ULONG R2; > ULONG R3; > ULONG R4; > ULONG R5; > ULONG R6; > ULONG R7; > ULONG R8; > ULONG R9; > ULONG R10; > ULONG R11; > ULONG R12; > > // > // This section is specified/returned if the ContextFlags word > contains > // the flag CONTEXT_CONTROL. > // > ULONG Sp; > ULONG Lr; > ULONG Pc; > ULONG Psr; > > #define NUM_VFP_REGS 32 > #define NUM_EXTRA_CONTROL_REGS 8 > // Floating point registers > ULONG Fpscr; > ULONG FpExc; > ULONG S[NUM_VFP_REGS+1]; > ULONG FpExtra[NUM_EXTRA_CONTROL_REGS]; > > } CONTEXT; > .... >> >> >> What is the role of process.h (as i have disabled it, see patch below)? >> >> In errno.c there are pthread_self () returns pthread_t >> which is sometimes a pointer on a big struct, whereas in >> my case it ended up to >> typedef struct { >> void * p; /* Pointer to actual object */ >> unsigned int x; /* Extra information - reuse count etc */ >> } ptw32_handle_t; >> >> >> >> How can i track this down? >> >> thank you >> Marcel pthreads-2006-11-29.patch -------------SNIP------------- Index: create.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/create.c,v retrieving revision 1.63 diff -r1.63 create.c 41c41,43 < #include --- > # ifndef WINCE > # include > # endif Index: errno.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/errno.c,v retrieving revision 1.13 diff -r1.13 errno.c 76a77,90 > # ifdef WINCE > if ((self = pthread_self ()).p == NULL) > { > /* > * Yikes! unable to allocate a thread! > * Throw an exception? return an error? > */ > result = &reallyBad; > } > else > { > result = 0; /* &(self.x) Which errno is appropriate? */ > } > # else 88a103 > # endif Index: exit.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/exit.c,v retrieving revision 1.40 diff -r1.40 exit.c 41c41,43 < # include --- > # ifndef WINCE > # include > # endif Index: implement.h =================================================================== RCS file: /cvs/pthreads-win32/pthreads/implement.h,v retrieving revision 1.117 diff -r1.117 implement.h 661c661,663 < # include --- > # ifndef WINCE > # include > # endif 670c672,676 < #define PTW32_INTERLOCKED_COMPARE_EXCHANGE ptw32_interlocked_compare_exchange --- > # if defined(WINCE) && defined(_ARM_) > # define PTW32_INTERLOCKED_COMPARE_EXCHANGE InterlockedCompareExchange > # else > # define PTW32_INTERLOCKED_COMPARE_EXCHANGE ptw32_interlocked_compare_exchange > # endif Index: mutex.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/mutex.c,v retrieving revision 1.63 diff -r1.63 mutex.c 38c38,40 < # include --- > # ifndef WINCE > # include > # endif Index: pthread.h =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread.h,v retrieving revision 1.135 diff -r1.135 pthread.h 1215c1215,1217 < PTW32_DLLPORT int * PTW32_CDECL _errno( void ); --- > # ifndef WINCE > PTW32_DLLPORT int * PTW32_CDECL _errno( void ); > # endif Index: pthread_cancel.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_cancel.c,v retrieving revision 1.10 diff -r1.10 pthread_cancel.c 43a44,52 > #if defined(WINCE) && defined(_ARM_) > /* This is a hack as i don't know what to use (Marcel Ruff 2006-11-29) */ > static ULONG val; > # define PTW32_PROGCTR(Context) (val) > /* TODO: What to use from > /* typedef struct _CONTEXT in C:\Program Files\Microsoft Visual Studio 8\SmartDevices\SDK\Smartphone2003\Include\winnt.h */ > /*#define PTW32_PROGCTR(Context) ((Context).FpExc)*/ > #endif > Index: pthread_detach.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_detach.c,v retrieving revision 1.10 diff -r1.10 pthread_detach.c 45c45,47 < #include --- > #ifndef WINCE > # include > #endif Index: pthread_join.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_join.c,v retrieving revision 1.11 diff -r1.11 pthread_join.c 45c45,47 < #include --- > #ifndef WINCE > # include > #endif Index: pthread_kill.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_kill.c,v retrieving revision 1.7 diff -r1.7 pthread_kill.c 44c44,46 < #include --- > #ifndef WINCE > # include > #endif Index: pthread_rwlock_destroy.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_destroy.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_destroy.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28): WINCE doesn't know it */ Index: pthread_rwlock_init.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_init.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_init.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlock_rdlock.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_rdlock.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_rdlock.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlock_timedrdlock.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_timedrdlock.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_timedrdlock.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlock_timedwrlock.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_timedwrlock.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_timedwrlock.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlock_tryrdlock.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_tryrdlock.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_tryrdlock.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlock_trywrlock.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_trywrlock.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_trywrlock.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlock_unlock.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_unlock.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlock_unlock.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlock_wrlock.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlock_wrlock.c,v retrieving revision 1.6 diff -r1.6 pthread_rwlock_wrlock.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlockattr_destroy.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlockattr_destroy.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlockattr_destroy.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlockattr_getpshared.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlockattr_getpshared.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlockattr_getpshared.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlockattr_init.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlockattr_init.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlockattr_init.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */ Index: pthread_rwlockattr_setpshared.c =================================================================== RCS file: /cvs/pthreads-win32/pthreads/pthread_rwlockattr_setpshared.c,v retrieving revision 1.5 diff -r1.5 pthread_rwlockattr_setpshared.c 37c37 < #include --- > /*#include is included by pthread.h (Marcel Ruff 2006-11-28) */