* Fixed a crash when freeing memory of pets
* Added Cygwin support to the -DDUMPSTACK option, and changed its format * Removed duplicate fopen in login_log git-svn-id: https://svn.code.sf.net/p/rathena/svn/branches/stable@1250 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
d2dd679325
commit
244c817d0d
@ -1,6 +1,10 @@
|
||||
Date Added
|
||||
|
||||
03/18
|
||||
* Fixed a crash when freeing memory of pets [celest]
|
||||
* Added Cygwin support to the -DDUMPSTACK option, and changed its format
|
||||
to "<server type><number>.stackdump", thanks to Ser [celest]
|
||||
* Removed duplicate fopen in login_log [celest]
|
||||
* Don't log SQL char actions if log_char is not enabled in char_athena.conf
|
||||
[celest]
|
||||
* Updated shop_exp's calculation to give more exp, thanks to tcdiem [celest]
|
||||
|
@ -26,6 +26,10 @@
|
||||
#include "memwatch.h"
|
||||
#endif
|
||||
|
||||
char server_type[24];
|
||||
int runflag = 1;
|
||||
unsigned long ticks = 0; // by MC Cameri
|
||||
char pid_file[256];
|
||||
static void (*term_func)(void)=NULL;
|
||||
|
||||
/*======================================
|
||||
@ -100,42 +104,58 @@ static void sig_proc(int sn)
|
||||
* Dumps the stack using glibc's backtrace
|
||||
*-----------------------------------------
|
||||
*/
|
||||
#ifdef CYGWIN
|
||||
#define sig_dump SIG_DFL // allow cygwin's default dumper utility to handle this
|
||||
#else
|
||||
static void sig_dump(int sn)
|
||||
{
|
||||
#ifdef DUMPSTACK
|
||||
FILE *fp;
|
||||
void* array[20];
|
||||
|
||||
char **stack;
|
||||
size_t size;
|
||||
int no = 0;
|
||||
char tmp[256];
|
||||
|
||||
// search for a usable filename
|
||||
do {
|
||||
sprintf(tmp,"log/stackdump_%04d.txt", ++no);
|
||||
} while((fp = fopen(tmp,"r")) && (fclose(fp), no < 9999));
|
||||
// dump the trace into the file
|
||||
if ((fp = fopen (tmp,"w")) != NULL) {
|
||||
|
||||
fprintf(fp,"Exception: %s\n", strsignal(sn));
|
||||
fprintf(fp,"Stack trace:\n");
|
||||
size = backtrace (array, 20);
|
||||
stack = backtrace_symbols (array, size);
|
||||
for (no = 0; no < size; no++) {
|
||||
fprintf(fp, "%s\n", stack[no]);
|
||||
}
|
||||
fprintf(fp,"End of stack trace\n");
|
||||
|
||||
fclose(fp);
|
||||
aFree(stack);
|
||||
}
|
||||
#ifndef DUMPSTACK
|
||||
#define sig_dump SIG_DFL
|
||||
#else
|
||||
#ifdef CYGWIN
|
||||
#define FOPEN_ freopen
|
||||
extern void cygwin_stackdump();
|
||||
#else
|
||||
#define FOPEN_(fn,m,s) fopen(fn,m)
|
||||
#endif
|
||||
//cygwin_stackdump ();
|
||||
// When pass the signal to the system's default handler
|
||||
extern const char *strsignal(int);
|
||||
void sig_dump(int sn)
|
||||
{
|
||||
FILE *fp;
|
||||
char file[256];
|
||||
int no = 0;
|
||||
|
||||
#ifndef CYGWIN
|
||||
void* array[20];
|
||||
char **stack;
|
||||
size_t size;
|
||||
#endif
|
||||
|
||||
// search for a usable filename
|
||||
do {
|
||||
sprintf (file, "log/%s%04d.stackdump", server_type, ++no);
|
||||
} while((fp = fopen(file,"r")) && (fclose(fp), no < 9999));
|
||||
// dump the trace into the file
|
||||
|
||||
if ((fp = FOPEN_(file, "w", stderr)) != NULL) {
|
||||
printf ("Dumping stack... ");
|
||||
fprintf(fp, "Exception: %s \n", strsignal(sn));
|
||||
fflush (fp);
|
||||
|
||||
|
||||
#ifdef CYGWIN
|
||||
cygwin_stackdump ();
|
||||
#else
|
||||
fprintf(fp, "Stack trace:\n");
|
||||
size = backtrace (array, 20);
|
||||
stack = backtrace_symbols (array, size);
|
||||
for (no = 0; no < size; no++) {
|
||||
fprintf(fp, "%s\n", stack[no]);
|
||||
}
|
||||
fprintf(fp,"End of stack trace\n");
|
||||
aFree(stack);
|
||||
#endif
|
||||
|
||||
printf ("Done.\n");
|
||||
fflush(stdout);
|
||||
fclose(fp);
|
||||
}
|
||||
// Pass the signal to the system's default handler
|
||||
compat_signal(sn, SIG_DFL);
|
||||
raise(sn);
|
||||
}
|
||||
@ -202,11 +222,6 @@ static void display_title(void)
|
||||
*--------------------------------------
|
||||
*/
|
||||
|
||||
int runflag = 1;
|
||||
unsigned long ticks = 0; // by MC Cameri
|
||||
char pid_file[256];
|
||||
char server_type[24];
|
||||
|
||||
void pid_delete(void) {
|
||||
unlink(pid_file);
|
||||
}
|
||||
@ -289,7 +304,7 @@ int main(int argc,char **argv)
|
||||
|
||||
display_title();
|
||||
|
||||
#ifndef BCHECK
|
||||
#ifdef USE_MEMMGR
|
||||
do_init_memmgr(argv[0]); // 一番最初に実行する必要がある
|
||||
#endif
|
||||
|
||||
|
@ -189,7 +189,6 @@ int login_log(char *fmt, ...) {
|
||||
if(!log_fp)
|
||||
log_fp = fopen(login_log_filename, "a");
|
||||
|
||||
log_fp = fopen(login_log_filename, "a");
|
||||
if (log_fp) {
|
||||
if (fmt[0] == '\0') // jump a line if no message
|
||||
fprintf(log_fp, RETCODE);
|
||||
|
@ -610,7 +610,8 @@ int pet_remove_map(struct map_session_data *sd)
|
||||
pet_hungry_timer_delete(sd);
|
||||
clif_clearchar_area(&sd->pd->bl,0);
|
||||
map_delblock(&sd->pd->bl);
|
||||
free(sd->pd->lootitem);
|
||||
if (sd->pd->lootitem)
|
||||
aFree(sd->pd->lootitem);
|
||||
map_deliddb(&sd->pd->bl);
|
||||
}
|
||||
return 0;
|
||||
|
Loading…
x
Reference in New Issue
Block a user