[PATCH 1/3] os: Reshuffle the connection translation ifdefs

Keith Packard keithp at keithp.com
Tue Dec 15 13:04:35 PST 2009


On Mon, 14 Dec 2009 15:19:47 -0500, Adam Jackson <ajax at redhat.com> wrote:

> Use the wrapper functions consistently instead of hardcoding unix
> knowledge everywhere directly.

One general complaint -- #ifndef ... #else ... #endif should probably be
flipped around to avoid the double-negative sense in the #else clause.

Otherwise, it looks good to me.

Reviewed-by: Keith Packard <keithp at keithp.com>

> 
> Signed-off-by: Adam Jackson <ajax at redhat.com>
> ---
>  os/WaitFor.c    |    3 +--
>  os/connection.c |   44 ++++++++++++++++++++------------------------
>  os/io.c         |    2 +-
>  os/osdep.h      |    6 +-----
>  4 files changed, 23 insertions(+), 32 deletions(-)
> 
> diff --git a/os/WaitFor.c b/os/WaitFor.c
> index dfe85e5..7d10183 100644
> --- a/os/WaitFor.c
> +++ b/os/WaitFor.c
> @@ -338,8 +338,7 @@ WaitForSomething(int *pClientsReady)
>  	        int client_priority, client_index;
>  
>  		curclient = mffs (clientsReadable.fds_bits[i]) - 1;
> -		client_index = /* raphael: modified */
> -			ConnectionTranslation[curclient + (i * (sizeof(fd_mask) * 8))];
> +                client_index = GetConnectionTranslation(curclient);
>  #else
>  	int highest_priority = 0;
>  	fd_set savedClientsReadable;
> diff --git a/os/connection.c b/os/connection.c
> index 3ff93bb..bf16f6a 100644
> --- a/os/connection.c
> +++ b/os/connection.c
> @@ -159,7 +159,7 @@ static fd_set SavedClientsWithInput;
>  int GrabInProgress = 0;
>  
>  #if !defined(WIN32)
> -int *ConnectionTranslation = NULL;
> +static int *ConnectionTranslation = NULL;
>  #else
>  /*
>   * On NT fds are not between 0 and MAXSOCKS, they are unrelated, and there is
> @@ -179,15 +179,24 @@ struct _ct_node {
>      int value;
>  };
>  
> -struct _ct_node *ct_head[256];
> +static struct _ct_node *ct_head[256];
> +#endif
>  
>  void InitConnectionTranslation(void)
>  {
> +#ifndef WIN32
> +    if (!ConnectionTranslation)
> +        ConnectionTranslation = xnfalloc(sizeof(int)*(lastfdesc + 1));
> +#else
>      bzero(ct_head, sizeof(ct_head));
> +#endif
>  }
>  
>  int GetConnectionTranslation(int conn)
>  {
> +#ifndef WIN32
> +    return ConnectionTranslation[conn];
> +#else
>      struct _ct_node *node = ct_head[conn & 0xff];
>      while (node != NULL)
>      {
> @@ -196,10 +205,14 @@ int GetConnectionTranslation(int conn)
>          node = node->next;
>      }
>      return 0;
> +#endif
>  }
>  
>  void SetConnectionTranslation(int conn, int client)
>  {
> +#ifndef WIN32
> +    ConnectionTranslation[conn] = client;
> +#else
>      struct _ct_node **node = ct_head + (conn & 0xff);
>      if (client == 0) /* remove entry */
>      {
> @@ -232,10 +245,14 @@ void SetConnectionTranslation(int conn, int client)
>          (*node)->value = client;
>          return;
>      }
> +#endif
>  }
>  
>  void ClearConnectionTranslation(void)
>  {
> +#ifndef WIN32
> +    for (i=0; i<MaxClients; i++) ConnectionTranslation[i] = 0;
> +#else
>      unsigned i;
>      for (i = 0; i < 256; i++)
>      {
> @@ -247,8 +264,8 @@ void ClearConnectionTranslation(void)
>              xfree(temp);
>          }
>      }
> -}
>  #endif
> +}
>  
>  static XtransConnInfo 	*ListenTransConns = NULL;
>  static int	       	*ListenTransFds = NULL;
> @@ -314,12 +331,7 @@ InitConnectionLimits(void)
>      ErrorF("InitConnectionLimits: MaxClients = %d\n", MaxClients);
>  #endif
>  
> -#if !defined(WIN32)
> -    if (!ConnectionTranslation)
> -        ConnectionTranslation = (int *)xnfalloc(sizeof(int)*(lastfdesc + 1));
> -#else
>      InitConnectionTranslation();
> -#endif
>  }
>  
>  /*
> @@ -377,11 +389,7 @@ CreateWellKnownSockets(void)
>      FD_ZERO(&LastSelectMask);
>      FD_ZERO(&ClientsWithInput);
>  
> -#if !defined(WIN32)
> -    for (i=0; i<MaxClients; i++) ConnectionTranslation[i] = 0;
> -#else
>      ClearConnectionTranslation();
> -#endif
>  
>      FD_ZERO (&WellKnownConnections);
>  
> @@ -751,11 +759,7 @@ AllocNewConnection (XtransConnInfo trans_conn, int fd, CARD32 conn_time)
>  	xfree (oc);
>  	return NullClient;
>      }
> -#if !defined(WIN32)
> -    ConnectionTranslation[fd] = client->index;
> -#else
>      SetConnectionTranslation(fd, client->index);
> -#endif
>      if (GrabInProgress)
>      {
>          FD_SET(fd, &SavedAllClients);
> @@ -845,11 +849,7 @@ EstablishNewConnections(ClientPtr clientUnused, pointer closure)
>  	if (newconn < lastfdesc)
>  	{
>  		int clientid;
> -#if !defined(WIN32)
> -  		clientid = ConnectionTranslation[newconn];
> -#else
>    		clientid = GetConnectionTranslation(newconn);
> -#endif
>  		if(clientid && (client = clients[clientid]))
>   			CloseDownClient(client);
>  	}
> @@ -938,11 +938,7 @@ CloseDownFileDescriptor(OsCommPtr oc)
>  	_XSERVTransDisconnect(oc->trans_conn);
>  	_XSERVTransClose(oc->trans_conn);
>      }
> -#ifndef WIN32
> -    ConnectionTranslation[connection] = 0;
> -#else
>      SetConnectionTranslation(connection, 0);
> -#endif    
>      FD_CLR(connection, &AllSockets);
>      FD_CLR(connection, &AllClients);
>      FD_CLR(connection, &ClientsWithInput);
> diff --git a/os/io.c b/os/io.c
> index 64b64ae..2e8d1a0 100644
> --- a/os/io.c
> +++ b/os/io.c
> @@ -633,7 +633,7 @@ FlushAllOutput(void)
>  	{
>  	    index = ffs(mask) - 1;
>  	    mask &= ~lowbit(mask);
> -	    if ((index = ConnectionTranslation[(base * (sizeof(fd_mask)*8)) + index]) == 0)
> +            if ((index = GetConnectionTranslation(index)) == 0)
>  		continue;
>  	    client = clients[index];
>  	    if (client->clientGone)
> diff --git a/os/osdep.h b/os/osdep.h
> index 3d75bba..4ebe0e9 100644
> --- a/os/osdep.h
> +++ b/os/osdep.h
> @@ -195,13 +195,9 @@ extern fd_set ClientsWriteBlocked;
>  extern fd_set OutputPending;
>  extern fd_set IgnoredClientsWithInput;
>  
> -#ifndef WIN32
> -extern int *ConnectionTranslation;
> -#else
>  extern int GetConnectionTranslation(int conn);
>  extern void SetConnectionTranslation(int conn, int client);
> -extern void ClearConnectionTranslation();
> -#endif
> +extern void ClearConnectionTranslation(void);
>   
>  extern Bool NewOutputPending;
>  extern Bool AnyClientsWriteBlocked;
> -- 
> 1.6.5.2
> 
> _______________________________________________
> xorg-devel mailing list
> xorg-devel at lists.x.org
> http://lists.x.org/mailman/listinfo/xorg-devel

-- 
keith.packard at intel.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: not available
Url : http://lists.x.org/archives/xorg-devel/attachments/20091215/ca1b345f/attachment.pgp 


More information about the xorg-devel mailing list