непонятное падение
#1

всем привет.
столкнулся с проблемой падения, причину не могу понять.

Лог крашдетекта:
PHP Code:
[21:53:58] [debugServer crashed while executing State99.amx
[21:53:58] [debugAMX backtrace:
[
21:53:58] [debug#0 00621054 in public OnPlayerDisconnect (playerid=421, reason=58) at D:\gamemodes\gm171.pwn:105759
[21:53:58] [debug#1 native Kick () from samp03svr
[21:53:58] [debug#2 0066babc in public KickPublic (playerid=421) at D:\gamemodes\gm171.pwn:110288
[21:53:58] [debugRun time error 4"Array index out of bounds"
[21:53:58] [debug]  Attempted to read/write array element at index 6426708 in array of size 1000
[21:53:58] [debugAMX backtrace:
[
21:53:58] [debug#0 00621070 in SetPlayerDataToDefault (playerid=421) at D:\gamemodes\gm171.pwn:105759
[21:53:58] [debug#1 001142d4 in public SSCANF_OnPlayerDisconnect (playerid=421, reason=2) at D:\gamemodes\gm171.pwn:22995
[21:53:58] [debug#2 00001520 in public OnPlayerDisconnect (playerid=421, reason=2) at D:\pawno\include\sscanf.inc:260
[21:53:58] [debug#3 native Kick () from samp03svr
[21:53:58] [debug#4 0066babc in public KickPublic (playerid=421) at D:\gamemodes\gm171.pwn:110288
[21:53:58] [debugNative backtrace:
[
21:53:58] [debug#0 f74019f0 in _Z13GetStackTraceRSt6vectorI10StackFrameSaIS0_EEPv () from plugins/crashdetect.so
[21:53:58] [debug#1 f73faa62 in _ZN11CrashDetect20PrintNativeBacktraceERSoPv () from plugins/crashdetect.so
[21:53:58] [debug#2 f73fb764 in _ZN11CrashDetect20PrintNativeBacktraceEPv () from plugins/crashdetect.so
[21:53:58] [debug#3 f73fd6b4 in _ZN11CrashDetect11OnExceptionEPv () from plugins/crashdetect.so
[21:53:58] [debug#4 f740131d in ?? () from plugins/crashdetect.so
[21:53:58] [debug#5 f7759410 in ?? ()
[21:53:58] [debug#6 f7759430 in ?? ()
[21:53:58] [debug#7 f7458667 in gsignal () from /lib/libc.so.6
[21:53:58] [debug#8 f7459ea3 in abort () from /lib/libc.so.6
[21:53:58] [debug#9 f7497a55 in ?? () from /lib/libc.so.6
[21:53:58] [debug#10 f749f71d in ?? () from /lib/libc.so.6
[21:53:58] [debug#11 f768d97f in _ZdlPv () from /lib/libstdc++.so.6
[21:53:58] [debug#12 f768d9cb in _ZdaPv () from /lib/libstdc++.so.6
[21:53:58] [debug#13 0807fef7 in ?? () from ./samp03svr
[21:53:58] [debug#14 0808013d in ?? () from ./samp03svr
[21:53:58] [debug#15 08074c3a in ?? () from ./samp03svr
[21:53:58] [debug#16 080763fe in ?? () from ./samp03svr
[21:53:58] [debug#17 f7737b2c in ?? () from /lib/libpthread.so.0
[21:53:58] [debug#18 f752177e in clone () from /lib/libc.so.6 
Собственно судя по этому проблема в строке 105759, которая находится в OnPlayerDisconnect

И самое интересное. вот эта строка.
PHP Code:
            if( dz != playerid && pTemp[dz][pIsInHouseID] == pTemp[dz][pIsInHouseID] && pTemp[dz][pIsInHouse] == true Nodel ++; 
строка находится в цикле.
PHP Code:
        for( new dz 0dz MAX_PLAYERSdz ++ )
        {
            if( 
dz != playerid && pTemp[dz][pIsInHouseID] == pTemp[dz][pIsInHouseID] && pTemp[dz][pIsInHouse] == true Nodel ++;
        } 
и судя по информации с лога можно сделать вывод что проблема в pTemp. размер ее 1000, а обращение идет к ячейке 6426708.
и вот вопрос. как мог возникнуть такой адрес ячейки в цикле, когда он идет от 0 до 999.

До этого были похожие падения, где крашдетект в конечном итоге ругался на функцию ++ из стандартного инклуда float, здесь она тоже присутствует, может это тоже как то связано.
И почему в первой ошибке причина дисконнекта равна 58 ? это как?
Reply
#2

Лично я вижу две ошибки:
Первая:
PHP Code:
[21:53:58] [debugServer crashed while executing State99.amx 
[21:53:58] [debugAMX backtrace
[
21:53:58] [debug#0 00621054 in public OnPlayerDisconnect (playerid=421, reason=58) at D:\gamemodes\gm171.pwn:105759 
[21:53:58] [debug#1 native Kick () from samp03svr 
[21:53:58] [debug#2 0066babc in public KickPublic (playerid=421) at D:\gamemodes\gm171.pwn:110288 
И вторая:
PHP Code:
[21:53:58] [debugRun time error 4"Array index out of bounds" 
[21:53:58] [debug]  Attempted to read/write array element at index 6426708 in array of size 1000 
[21:53:58] [debugAMX backtrace
[
21:53:58] [debug#0 00621070 in SetPlayerDataToDefault (playerid=421) at D:\gamemodes\gm171.pwn:105759 
[21:53:58] [debug#1 001142d4 in public SSCANF_OnPlayerDisconnect (playerid=421, reason=2) at D:\gamemodes\gm171.pwn:22995 
[21:53:58] [debug#2 00001520 in public OnPlayerDisconnect (playerid=421, reason=2) at D:\pawno\include\sscanf.inc:260 
[21:53:58] [debug#3 native Kick () from samp03svr 
[21:53:58] [debug#4 0066babc in public KickPublic (playerid=421) at D:\gamemodes\gm171.pwn:110288 
Честно говоря, не знаю в чём проблема в первом примере, могу лишь предложить расположить каждую операцию в своей строке, чтобы проблему было проще локализовать. А reason 58 - это не удивительно, OnPlayerDisconnect можно вызывать обычной отправкой RPC, что означает, что этот паблик может быть вызыван в любое время с любыми данными и даже без реального отключения игрока (что, я полагаю, может привести к непредвиденной работе сервера).

На счёт второй проблемы - всё просто, нужно смотреть SetPlayerDataToDefault.

Также не помешает информация об используемых ФС и плагинах.
Reply
#3

так те строки на которые указывает и которые я скинул это и есть в SetPlayerDataToDefault.

фс не используем, плагины streamer, sscanf и sql.

предположим что 58 послал кто-то специально, но как могло появиться число 6426708 в переменной цикла не понятно
Reply
#4

Quote:
Originally Posted by TiW
View Post
так те строки на которые указывает и которые я скинул это и есть в SetPlayerDataToDefault.

фс не используем, плагины streamer, sscanf и sql.

предположим что 58 послал кто-то специально, но как могло появиться число 6426708 в переменной цикла не понятно
Собери с флагом -l и найди то место, может макросы кривые.
Reply
#5

Quote:

А reason 58 - это не удивительно, OnPlayerDisconnect можно вызывать обычной отправкой RPC, что означает, что этот паблик может быть вызыван в любое время с любыми данными и даже без реального отключения игрока

Нет, нельзя. В reason кроме как 0, 1 и 2 других значений быть не может. Раньше была уязвимость, позволяющая сделать фейковый вылет с сервера, но при этом оставаться на нём, сейчас уже такого нет

Какая версия crashdetect? Что-то мне подсказывает, что он немного сошёл с ума
Reply
#6

Quote:
Originally Posted by DartfoL
View Post
Какая версия crashdetect? Что-то мне подсказывает, что он немного сошёл с ума
Самая последняя. (https://github.com/Zeex/samp-plugin-...ases/tag/v4.16)
Reply
#7

а как часто сервер падает?
Reply
#8

Quote:
Originally Posted by DartfoL
View Post
а как часто сервер падает?
по разному, в среднем пару раз в неделю.
еще падает с другой не понятной причиной порой

PHP Code:
[01:44:09] [debugServer crashed while executing State99.amx
[01:44:09] [debugAMX backtrace:
[
01:44:09] [debug#0 00000016 in public OnPlayerDisconnect () at D:\server\pawno\include\float.inc:103
[01:44:09] [debug#1 native Kick () from samp03svr
[01:44:09] [debug#2 ffffffff in public KickPublic () at <unknown file>:0
[01:44:09] [debugNative backtrace:
[
01:44:09] [debug#0 f73d19f0 in _Z13GetStackTraceRSt6vectorI10StackFrameSaIS0_EEPv () from plugins/crashdetect.so
[01:44:09] [debug#1 f73caa62 in _ZN11CrashDetect20PrintNativeBacktraceERSoPv () from plugins/crashdetect.so
[01:44:09] [debug#2 f73cb764 in _ZN11CrashDetect20PrintNativeBacktraceEPv () from plugins/crashdetect.so
[01:44:09] [debug#3 f73cd6b4 in _ZN11CrashDetect11OnExceptionEPv () from plugins/crashdetect.so
[01:44:09] [debug#4 f73d131d in ?? () from plugins/crashdetect.so
[01:44:09] [debug#5 f7729410 in ?? ()
[01:44:09] [debug#6 f7729430 in ?? ()
[01:44:09] [debug#7 f7428667 in gsignal () from /lib/libc.so.6
[01:44:09] [debug#8 f7429ea3 in abort () from /lib/libc.so.6
[01:44:09] [debug#9 f7467a55 in ?? () from /lib/libc.so.6
[01:44:09] [debug#10 f746f71d in ?? () from /lib/libc.so.6
[01:44:09] [debug#11 f765d97f in _ZdlPv () from /lib/libstdc++.so.6
[01:44:09] [debug#12 f765d9cb in _ZdaPv () from /lib/libstdc++.so.6
[01:44:09] [debug#13 0807fef7 in ?? () from ./samp03svr
[01:44:09] [debug#14 0808013d in ?? () from ./samp03svr
[01:44:09] [debug#15 08074c3a in ?? () from ./samp03svr
[01:44:09] [debug#16 080763fe in ?? () from ./samp03svr
[01:44:09] [debug#17 f7707b2c in ?? () from /lib/libpthread.so.0
[01:44:09] [debug#18 f74f177e in clone () from /lib/libc.so.6 
P.S 103 строчка в float это ++
Reply
#9

А можно сюда весь паблик OnPlayerDisconnect, товарищ?
Reply
#10

Попробуй замени ++ на floatadd(operand,1.0)
Reply
#11

Компилятор какой?
Reply
#12

Quote:
Originally Posted by ZiGGi
View Post
Компилятор какой?
обычный который в сборке с серверными файлами лежит
Reply
#13

кик такой кик
Reply
#14

Я так понял, что вы с даймонда. У нас на адвансе аналогичная проблема, так же пару раз в неделю падает, те же адреса краша, тоже при кике игрока.
Я ковырялся в сервере, это какая-то проблема в глубине ракнета. Ломается один из указателей и потом сервер пытается высвободить память по этому указателю.
Как давно появилась эта проблема?
Reply
#15

Quote:
Originally Posted by DartfoL
View Post
Я так понял, что вы с даймонда. У нас на адвансе аналогичная проблема, так же пару раз в неделю падает, те же адреса краша, тоже при кике игрока.
Я ковырялся в сервере, это какая-то проблема в глубине ракнета. Ломается один из указателей и потом сервер пытается высвободить память по этому указателю.
Как давно появилась эта проблема?
очень давно еще наблюдал такие причины, но потом как то вроде было нормально. сейчас ближайшие 2 недели поставили крашдетект что-бы найти мелкие ошибки и это заметили за одно.
Reply
#16

Ну,тогда если у адванса и даймонда аналогичная проблема,значит это какой-то чит или тому подобное
Reply
#17

Существует похожая проблема на сервере до 50 онлайна. Падает сервер ~раз в 2 суток с теми же ошибками.
Reply
#18

Вот подобная тема 2014 года: https://sampforum.blast.hk/showthread.php?tid=525699

Quote:
Originally Posted by DartfoL
View Post
Я ковырялся в сервере, это какая-то проблема в глубине ракнета. Ломается один из указателей и потом сервер пытается высвободить память по этому указателю.
Похоже на то, ибо с памятью явно творится что-то не ладное.

Случайно #pragma dynamic не балуетесь?
Reply
#19

Quote:
Originally Posted by ZiGGi
View Post
Вот подобная тема 2014 года: https://sampforum.blast.hk/showthread.php?tid=525699



Похоже на то, ибо с памятью явно творится что-то не ладное.

Случайно #pragma dynamic не балуетесь?
мы нет
Reply
#20

Если кик в OnPlayerDisconnect юзать, то при некоторых причинах выхода замечались краши.
Reply


Forum Jump:


Users browsing this thread: 4 Guest(s)