Ver Fonte

* Tweeked the declaration and initialization defines for vectors.
* Made do_sockets leave the for loop as soon as the readable number of sockets returned by select is found.
* Made all posix compliant systems that support it and FreeBSD >= 5.1 (implements it but doesn't have the posix defines) use the precise and consistent tick() implementation.
* Minor tweek to HEAP_SEARCH (same variable can be used in from and to).
* Fixed the map server not exiting when make_listen_bind fails and returns -1.

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@11983 54d463be-8e91-2dee-dedb-b68131a5f0ec

FlavioJS há 17 anos atrás
pai
commit
4dcf5bb0b9
6 ficheiros alterados com 50 adições e 19 exclusões
  1. 10 0
      Changelog-Trunk.txt
  2. 27 11
      src/common/db.h
  3. 4 2
      src/common/socket.c
  4. 4 2
      src/common/timer.c
  5. 2 1
      src/map/clif.c
  6. 3 3
      src/map/map.h

+ 10 - 0
Changelog-Trunk.txt

@@ -3,6 +3,16 @@ Date	Added
 AS OF SVN REV. 5091, WE ARE NOW USING TRUNK.  ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
 IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
 
+2007/12/27
+	* Tweeked the declaration and initialization defines for vectors.
+	* Made do_sockets leave the for loop as soon as the readable number of 
+	  sockets returned by select is found.
+	* Made all posix compliant systems that support it and FreeBSD >= 5.1 
+	  (implements it but doesn't have the posix defines) use the precise and 
+	  consistent tick() implementation.
+	* Minor tweek to HEAP_SEARCH (same variable can be used in from and to).
+	* Fixed the map server not exiting when make_listen_bind fails and 
+	  returns -1. [FlavioJS]
 2007/12/26
 	* Fixed the incorrect interpretation of the map-cell height information
 	  stored in .gat files; this was causing an overall of 20000 cells to

+ 27 - 11
src/common/db.h

@@ -854,11 +854,23 @@ void  linkdb_final  ( struct linkdb_node** head );
 
 
 
+/// Declares an anonymous vector struct.
+///
+/// @param __type Type of data
+#define VECTOR_DECL(__type) \
+	struct { \
+		size_t _max_; \
+		size_t _len_; \
+		__type* _data_; \
+	}
+
+
+
 /// Declares a named vector struct.
 ///
 /// @param __name Structure name
 /// @param __type Type of data
-#define VECTOR_STRUCT(__name,__type) \
+#define VECTOR_STRUCT_DECL(__name,__type) \
 	struct __name { \
 		size_t _max_; \
 		size_t _len_; \
@@ -867,7 +879,16 @@ void  linkdb_final  ( struct linkdb_node** head );
 
 
 
-/// Declares a named vector struct variable.
+/// Declares and initializes an anonymous vector variable.
+///
+/// @param __type Type of data
+/// @param __var Variable name
+#define VECTOR_VAR(__type,__var) \
+	VECTOR_DECL(__type) __var = {0,0,NULL}
+
+
+
+/// Declares and initializes a named vector variable.
 ///
 /// @param __name Structure name
 /// @param __var Variable name
@@ -876,16 +897,11 @@ void  linkdb_final  ( struct linkdb_node** head );
 
 
 
-/// Declares a vector variable with an anonymous struct.
+/// Initializes a vector.
 ///
-/// @param __type Type of data
-/// @param __var Variable name
-#define VECTOR_VAR(__type,__var) \
-	struct { \
-		size_t _max_; \
-		size_t _len_; \
-		__type* _data_; \
-	} __var = {0,0,NULL}
+/// @param __vec Vector
+#define VECTOR_INIT(__vec) \
+	memset(&(__vec), 0, sizeof(__vec))
 
 
 

+ 4 - 2
src/common/socket.c

@@ -716,11 +716,13 @@ int do_sockets(int next)
 	}
 #else
 	// otherwise assume that the fd_set is a bit-array and enumerate it in a standard way
-	//TODO: select() returns the number of readable sockets; use that to exit the fd_max loop faster
-	for (i = 1; i < fd_max; i++)
+	for( i = 1; ret && i < fd_max; ++i )
 	{
 		if(sFD_ISSET(i,&rfd) && session[i])
+		{
 			session[i]->func_recv(i);
+			--ret;
+		}
 	}
 #endif
 

+ 4 - 2
src/common/timer.c

@@ -12,8 +12,10 @@
 #include <time.h>
 
 #ifdef WIN32
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h> // GetTickCount()
 #else
+#include <unistd.h>
 #include <sys/time.h> // struct timeval, gettimeofday()
 #endif
 
@@ -93,7 +95,7 @@ static unsigned int tick(void)
 {
 #if defined(WIN32)
 	return GetTickCount();
-#elif defined(__FREEBSD__)
+#elif (defined(_POSIX_TIMERS) && _POSIX_TIMERS > 0 && defined(_POSIX_MONOTONIC_CLOCK) /* posix compliant */) || (defined(__FreeBSD_cc_version) && __FreeBSD_cc_version >= 500005 /* FreeBSD >= 5.1.0 */)
 	struct timespec tval;
 	clock_gettime(CLOCK_MONOTONIC, &tval);
 	return tval.tv_sec * 1000 + tval.tv_nsec / 1000000;
@@ -147,8 +149,8 @@ unsigned int gettick(void)
 #define HEAP_SEARCH(target,from,to,pos) \
 	do { \
 		int max,pivot; \
-		pos = from; \
 		max = to; \
+		pos = from; \
 		while (pos < max) { \
 			pivot = (pos + max) / 2; \
 			if (DIFF_TICK(target, timer_data[timer_heap[pivot]].tick) < 0) \

+ 2 - 1
src/map/clif.c

@@ -12043,7 +12043,8 @@ int do_init_clif(void)
 	packetdb_readdb();
 
 	set_defaultparse(clif_parse);
-	if (!make_listen_bind(bind_ip,map_port)) {
+	if( make_listen_bind(bind_ip,map_port) == -1 )
+	{
 		ShowFatalError("can't bind game port\n");
 		exit(EXIT_FAILURE);
 	}

+ 3 - 3
src/map/map.h

@@ -374,10 +374,10 @@ struct status_change_entry {
 };
 
 struct status_change {
-	unsigned int option;// effect state
-	unsigned int opt3;// skill state
+	unsigned int option;// effect state (bitfield)
+	unsigned int opt3;// skill state (bitfield)
 	unsigned short opt1;// body state
-	unsigned short opt2;// health state
+	unsigned short opt2;// health state (bitfield)
 	unsigned char count;
 	//TODO: See if it is possible to implement the following SC's without requiring extra parameters while the SC is inactive.
 	unsigned char jb_flag; //Joint Beat type flag