nanogui: Thread: update client.c nano-X.h ecos_app.c from nano-X cvs for eCos


[<<] [<] Page 1 of 1 [>] [>>]
Subject: update client.c nano-X.h ecos_app.c from nano-X cvs for eCos
From: "Lecordier, Guy" ####@####.####
Date: 3 Nov 2008 14:50:30 -0000
Message-Id: <427FC27C2ABCC042A7FB4E17D3F893B7FB168E@lauescmx01.ROPERIND.NET>

Hi all,

Modification done to compile client.c from nano-X cvs for ecos
nxErrorStrings[] was in a #ifndef __ECOS branch, so it was undefined for
the __ECOS compilation,I move it outside the #ifndef branch. 

The definition of ecos_nanox_client_data_index is specific to eCos. I
move it in the specific file ecos_app.c, where it is initialized.

Add ACCESS_PER_THREAD_DATA() before evlist in GrGetNextEventTimeout()

Modification done in nano-x.h
ecos_nanox_client_data_index initialization is removed from
INIT_PER_THREAD_DATA() avoiding to reinit it each time a new thread
starts.

#if defined(__ECOS) && !defined(NONETWORK) to enable the data per thread
in client server mode and to disable them in the NONETWORK mode.


Modification done in ecos_app.c
ecos_nanox_client_data_index = cyg_thread_new_data_index();
To initialize ecos_nanox_client_data_index once.



[patch]
Index: src/ecos/ecos_app.c
===================================================================
RCS file: /usr/cvs/microwin/src/ecos/ecos_app.c,v
retrieving revision 1.2
diff -u -r1.2 ecos_app.c
--- src/ecos/ecos_app.c	21 Aug 2002 16:36:19 -0000	1.2
+++ src/ecos/ecos_app.c	3 Nov 2008 13:39:40 -0000
@@ -73,6 +73,12 @@
     char         stack[STACKSIZE];
 };
 
+/*
+ * eCos uses a thread data pointer to store all statics in...
+ */
+int ecos_nanox_client_data_index = CYGNUM_KERNEL_THREADS_DATA_MAX;
+
+
 struct nx_thread _threads[] = {
     { "System startup", startup_thread,    11 },
     { "Nano-X server",  nanox_thread,      12 },
@@ -94,13 +100,14 @@
 #define NUM(x) (sizeof(x)/sizeof(x[0]))
 
 // Functions not provided in eCos by standard...
+/*
 char *
 strdup(char *string) {
     char *newbit = malloc(strlen(string)+1);
     strcpy(newbit,string);
     return newbit;
 }
-
+*/
 int 
 gettimeofday(struct timeval *tv,
              struct timezone *tz)
@@ -124,7 +131,6 @@
 static void 
 startup_thread(CYG_ADDRESS data)
 {
-    cyg_ucount32 nanox_data_index;
     int i;
     struct nx_thread *nx;
 
@@ -164,15 +170,15 @@
     // Allocate a free thread data slot
     // Note: all MicroWindows/NanoX threads use this slot for
NanoX-private
     // data.  That's why there is only one call here.
-    nanox_data_index = cyg_thread_new_data_index();
-    printf("data index = %d\n", nanox_data_index);
+    ecos_nanox_client_data_index = cyg_thread_new_data_index();
+    printf("data index = %d\n", ecos_nanox_client_data_index);
 
     printf("Creating system threads\n");
     nx = &_threads[1];
     for (i = 1;  i < NUM(_threads);  i++, nx++) {
         cyg_thread_create(nx->prio,
                           nx->entry,
-                          (cyg_addrword_t) nanox_data_index,
+                          (cyg_addrword_t) 0,
                           nx->name,
                           (void *)nx->stack, STACKSIZE,
                           &nx->t,
@@ -187,7 +193,7 @@
         // Special case - run additional code, specific to this
environment
         // only after the server has had a chance to startup
         if (i == 2) {
-            ecos_nx_init(nanox_data_index);
+            ecos_nx_init(ecos_nanox_client_data_index);
         }
     }
 
Index: src/nanox/client.c
===================================================================
RCS file: /usr/cvs/microwin/src/nanox/client.c,v
retrieving revision 1.52
diff -u -r1.52 client.c
--- src/nanox/client.c	7 Jan 2008 00:01:31 -0000	1.52
+++ src/nanox/client.c	3 Nov 2008 13:39:42 -0000
@@ -40,6 +40,7 @@
 #define ADDR_FAM AF_NANO
 #elif __ECOS
 #include <netinet/in.h>
+#include <netdb.h>
 #include <arpa/inet.h>
 #include <sys/select.h>
 #include <cyg/kernel/kapi.h>
@@ -91,13 +92,6 @@
 static int regfdmax = -1;	/* GrRegisterInput globals*/
 static fd_set regfdset;
 
-/**
- * Human-readable error strings.
- */
-const char *nxErrorStrings[] = {
-	GR_ERROR_STRINGS
-};
-
 static EVENT_LIST *	evlist;
 
 /*
@@ -107,14 +101,15 @@
  * will only be called when the client asks for events.
  */
 static GR_FNCALLBACKEVENT ErrorFunc = GrDefaultErrorHandler;
+#endif
 
-#else /* __ECOS*/
-/*
- * eCos uses a thread data pointer to store all statics in...
+/**
+ * Human-readable error strings.
  */
-int ecos_nanox_client_data_index = CYGNUM_KERNEL_THREADS_DATA_MAX;
+const char *nxErrorStrings[] = {
+  GR_ERROR_STRINGS
+};
 
-#endif
 
 static void QueueEvent(GR_EVENT *ep);
 static void GetNextQueuedEvent(GR_EVENT *ep);
@@ -931,6 +926,7 @@
 void
 GrGetNextEventTimeout(GR_EVENT * ep, GR_TIMEOUT timeout)
 {
+  ACCESS_PER_THREAD_DATA()
 	LOCK(&nxGlobalLock);
 	if (evlist) {
 		/*DPRINTF("nxclient %d: Returning queued
event\n",getpid());*/
Index: src/include/nano-X.h
===================================================================
RCS file: /usr/cvs/microwin/src/include/nano-X.h,v
retrieving revision 1.40
diff -u -r1.40 nano-X.h
--- src/include/nano-X.h	7 Jan 2008 00:01:31 -0000	1.40
+++ src/include/nano-X.h	3 Nov 2008 13:39:41 -0000
@@ -1009,9 +1009,11 @@
 	unsigned char *buffer;		/* request buffer*/
 } REQBUF;
 
-#ifdef __ECOS
+#if defined(__ECOS) && !defined(NONETWORK)
 #include <sys/select.h>
 #include <cyg/kernel/kapi.h>
+#include "lock.h"     // needed by MWMUTEX
+
 /*
  * In a single process, multi-threaded environment, we need to keep
  * all static data of shared code in a structure, with a pointer to
@@ -1038,9 +1040,8 @@
 #define INIT_PER_THREAD_DATA()
\
     {
\
         ecos_nanox_client_data *dptr =
malloc(sizeof(ecos_nanox_client_data));  \
-        ecos_nanox_client_data_index = data;
\
         dptr->_nxSocket = -1;
\
-	dptr->nxGlobalLock = 0;
+	      dptr->_nxGlobalLock = 0;
\
         dptr->_storedevent = 0;
\
         dptr->_regfdmax = -1;
\
         FD_ZERO(&dptr->_regfdset);
\
@@ -1062,7 +1063,9 @@
 #define reqbuf                  (data->_reqbuf)
 #define evlist                  (data->_evlist)
 
+
 #else
+#define INIT_PER_THREAD_DATA()
 #define ACCESS_PER_THREAD_DATA()
 #endif


Any comments
Regards

Guy


[<<] [<] Page 1 of 1 [>] [>>]


Powered by ezmlm-browse 0.20.