Code: Select all
***ERROR: G_Alloc: failed on allocation of 39 bits***
ShutdownGame
--------------------------------------------------------
DROPPED
Code: Select all
***ERROR: G_Alloc: failed on allocation of 39 bits***
ShutdownGame
--------------------------------------------------------
DROPPED
Code: Select all
#define POOLSIZE (256 * 1024)
Code: Select all
static char memoryPool[POOLSIZE];
static int allocPoint;
void *G_Alloc( int size ) {
char *p;
if ( g_debugAlloc.integer ) {
G_Printf( "G_Alloc of %i bytes (%i left)\n", size, POOLSIZE - allocPoint - ( ( size + 31 ) & ~31 ) );
}
if ( allocPoint + size > POOLSIZE ) {
G_Error( "G_Alloc: failed on allocation of %i bytes\n", size ); // bk010103 - was %u, but is signed
return NULL;
}
p = &memoryPool[allocPoint];
allocPoint += ( size + 31 ) & ~31;
return p;
}
Comment, et où ?Enfin bref:
soit modifier G_Alloc pour pouvoir récupérer de la mémoire (dev)
soit augmenter la mémoire et reculer l'échéance (dev)
C'est bien ce que je pensaisCorran Horn wrote:C'est après un certain temps d'utilisation, ça plante. s:snif s:snif
Gamall wrote:Il y a moyen d'allouer de la mémoire, mais pas de la "désallouer" [...]Donc, à vue de nez, je suppose que ce type d'erreur arrive fatalement tôt ou tard...
J'ai mis "(dev)" sur les deux premieres solutions pour indiquer que c'est aux devs de makermod de le faire. Personne ne peut le faire à leur place. Cf les deux premières lignes de mon dernier postCorran Horn wrote:Comment, et où ?
Tiens, d'ailleurs, en regardant le code il y a une fonction sympa (que je ne connaissais pas) qui permet de savoir où tu en es:Gamall wrote:soit redémarrer le serv plus souvent pour désengorger toute la mémoire. (toi)
Code: Select all
void Svcmd_GameMem_f( void ) {
G_Printf( "Game memory status: %i out of %i bytes allocated\n", allocPoint, POOLSIZE );
}
-------------
if (Q_stricmp (cmd, "game_memory") == 0) {
Svcmd_GameMem_f();
return qtrue;
}
Code: Select all
RCON game_memory
Code: Select all
if ( g_debugAlloc.integer ) {
G_Printf( "G_Alloc of %i bytes (%i left)\n", size, POOLSIZE - allocPoint - ( ( size + 31 ) & ~31 ) );
}
Code: Select all
set g_debugAlloc 1
Pas possible avec un batch, il faudrait écrire un programme pour ça. C'est faisable (même facile), mais comme ce n'est pas du tout le type de programme que j'écris habituellement, il faudrait que je passe une demi-journée à apprendre à utiliser des fonctions dont moi, je n'ai pas besoin, avant même de commencer à écrire le prog.- Rebooterais lorsque game_memory = 500 bytes (par exemple), soit
Sous linux, c'est hyper-fastoche de faire ce genre de script, tant que chaque serv est sur un compte utilisateur distinct. Sinon c'est moins fastoche (faut se traîner les PID). De toutes façons une bonne gestion c'est 1 user <=> 1 serv. Utilise la commande sleep <secondes>. Un truc du genreCorran Horn wrote:- Rebooterais tous les X minutes ?
Code: Select all
Xstop.sh
Xstart<serv approprié>.sh
sleep 600
Code: Select all
set nextmap "vstr X"
set _X "set nextmap vstr X"
set X "svsay Le serveur va rebooter dans 30 secondes; wait <selon la puissance de l'ordi>; map_restart; vstr _X"
Users browsing this forum: Google [Bot] and 127 guests