Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Страница 1 из 3 1 2 3 ПоследняяПоследняя
Показано с 1 по 10 из 23
  1. #1
    Аватар для quinsaiz
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.03.2021
    Сообщений
    9
    Репутация:
    0 ±

    "Long callback execution detected (hang or performance issue)" и long_call_time

    Код HTML:
    [17-01-2023 23:13:26] [Info] [debug] Long callback execution detected (hang or performance issue)
    [17-01-2023 23:13:26] [Info] [debug] AMX backtrace:
    [17-01-2023 23:13:26] [Info] [debug] #0 00000710 in Iter_ScriptInit () at D:\Desktop\OpenMP\pawno\include\foreach.inc:740
    [17-01-2023 23:13:26] [Info] [debug] #1 000003cc in public OnGameModeInit () at D:\Desktop\OpenMP\pawno\include\foreach.inc:660
    Получаю данное сообщение в логах, во время использования crashdetect и ключем "-d3". К серверу со стороны клиента невозможно подключиться.

    Инклуд foreach 2.2.3 от Ziggi, прикрепляю ниже.
    Вопрос: это у меня не оптимизированый код, хотя в samp-server нету подобных ошибок, или под open.mp нужно и переписать foreach, или ждать версию crashdetect под open.mp?

    foreach.inc – pastebin

    - - - Добавлено - - -

    UPD: проблема в этой строчке, наверное в "LAST_VEHICLE_ID"
    Код HTML:
    739: for (new vehicleid = 1; vehicleid != LAST_VEHICLE_ID; ++vehicleid) {
    Последний раз редактировалось quinsaiz; 18.01.2023 в 01:27.

  2. #2
    Аватар для Shaolinka
    Пользователь

    Статус
    Оффлайн
    Регистрация
    19.01.2020
    Сообщений
    69
    Репутация:
    8 ±
    PHP код:
    long_call_time 0 
    В server.cfg

    И к чему делать такой цикл, имея в арсенале foreach. Гораздо проще замутить перехват нативной CreateVehicle, добавляя ID созданного транспорта непосредственно в итератор, не изобретая таких вот велосипедов. Тем более, не до конца ясно значение LAST_VEHICLE_ID

  3. #3
    Аватар для quinsaiz
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.03.2021
    Сообщений
    9
    Репутация:
    0 ±
    Во-первых, server.cfg нету, поскольку это open.mp, тут другой файл-конфиг.
    Во-вторых, цикл этот в самом инклуде foreach, 739 строка, файл прикрепил; Значение переменной LAST_VEHICLE_ID в строке 694 того же инклуда, у себя я позже установил на 0
    Код HTML:
    #if defined GetPlayerPoolSize
    		new
    			LAST_PLAYER_ID = 0,
    			LAST_VEHICLE_ID = 0,
    			LAST_ACTOR_ID = 0;
    	#else
    		#define LAST_PLAYER_ID  MAX_PLAYERS
    		#define LAST_VEHICLE_ID MAX_VEHICLES
    		#define LAST_ACTOR_ID   MAX_ACTORS
    	#endif
    , в оригинале оно равно LAST_VEHICLE_ID = GetVehiclePoolSize() + 1, но open.mp не позволяет использовать функции Get***PoolSize, подробней[кликабельно], то есть мне сам компилятор давал варнинги, за использование данных функций.

  4. #4
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    В форке от Ziggi используется Get(Player/Vehicle)PoolSize внутри условия в одном из циклов, которое ломается и уходит в бесконечный цикл, если PoolSize функции начинают возвращать что-то меньше нуля. В омп завезли некоторые неуместные вещи из fixes.inc, так что поведение PoolSize функций было как раз изменено на подобное (возвращают -1, когда нет никаких созданных игроков или машин на сервере). По этой причине советую использовать другой форк от Kar'a (ссылка), где эти функции не используются вообще и такого риска уйти в зависон нет.

    - - - Добавлено - - -

    UPD: немного опередили, да. PoolSize функции для омп сервера ещё впридачу и помечены как deprecated, также по причине выше.

    Цитата Сообщение от quinsaiz Посмотреть сообщение
    Во-первых, server.cfg нету, поскольку это open.mp, тут другой файл-конфиг.
    Отлично есть, просто в режиме legacy (читай как полностью работает в данный момент для обратной совместимости на пару с .json конфигом)
    Последний раз редактировалось Nexius_Tailer; 18.01.2023 в 03:05.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  5. #5
    Аватар для quinsaiz
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.03.2021
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    В форке от Ziggi используется Get(Player/Vehicle)PoolSize внутри условия в одном из циклов, которое ломается и уходит в бесконечный цикл, если PoolSize функции начинают возвращать что-то меньше нуля. В омп завезли некоторые неуместные вещи из fixes.inc, так что поведение PoolSize функций было как раз изменено на подобное (возвращают -1, когда нет никаких созданных игроков или машин на сервере). По этой причине советую использовать другой форк от Kar'a (ссылка), где эти функции не используются вообще и такого риска уйти в зависон нет.

    - - - Добавлено - - -

    UPD: немного опередили, да. PoolSize функции для омп сервера ещё впридачу и помечены как deprecated, также по причине выше.


    Отлично есть, просто в режиме legacy (читай как полностью работает в данный момент для обратной совместимости на пару с .json конфигом)
    Сначало я использовал именно форк который Вы предоставили, но меня смутило предупреждение в логах
    Код HTML:
    [Warning] Parameter count does not match specifier in `Script_Call`. callback: Iter_OnGameModeInit - fmat:  - count: 3)
    По config.json я не нашел был документации, плагины в режиме легаси подключил, а вот long_call_time 0 стал прописывать именно в config.json , то есть можно создать server.cfg и прописывать там от старых плагинов параметры?

  6. #6
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от quinsaiz Посмотреть сообщение
    По config.json я не нашел был документации, плагины в режиме легаси подключил, а вот long_call_time 0 стал прописывать именно в config.json , то есть можно создать server.cfg и прописывать там от старых плагинов параметры?
    Да, пока что можно юзать server.cfg полноценно, если какие-то плагины вроде крашдетекта до сих пор читают именно server.cfg и не видят кастомные параметры заданные в config.json. Тем не менее, даже после любой возможной адаптации крашдетекта именно под омп сервер, "long_call_time" всё равно придётся отключать, т.к. ложных срабатываний у него больше, чем реальных обнаружений действительно медленных участков. Иными словами, реализовали недопиленную фичу и включили по умолчанию. От самп или омп сервера это там не зависит, чисто в крашдетекте проблема.

    Цитата Сообщение от quinsaiz Посмотреть сообщение
    Сначало я использовал именно форк который Вы предоставили, но меня смутило предупреждение в логах
    Код HTML:
    [Warning] Parameter count does not match specifier in `Script_Call`. callback: Iter_OnGameModeInit - fmat:  - count: 3)
    Хм, ну можно тогда попытаться закинуть доработки в один или второй форк, поправив эту или предыдущую проблему там и там. Просто авторы их вроде уже давно не обновляют и не факт, что проверят эти правки и примут в ближайшем будущем.
    Последний раз редактировалось Nexius_Tailer; 18.01.2023 в 03:18.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  7. #7
    Аватар для quinsaiz
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.03.2021
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Да, пока что можно юзать server.cfg полноценно, если какие-то плагины вроде крашдетекта до сих пор читают именно server.cfg и не видят кастомные параметры заданные в config.json. Тем не менее, даже после любой возможной адаптации крашдетекта именно под омп сервер, "long_call_time" всё равно придётся отключать, т.к. ложных срабатываний у него больше, чем реальных обнаружений действительно медленных участков. Иными словами, реализовали недопиленную фичу и включили по умолчанию. От самп или омп сервера это там не зависит, чисто в крашдетекте проблема.
    А что делать с предупреждением? Ничего страшного? "long_call_time 0" по сути не помогло против подобного, сервер не стартует, мб стоит попробывать использовать старые версии crashdetect'a?

    - - - Добавлено - - -

    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Да, пока что можно юзать server.cfg полноценно, если какие-то плагины вроде крашдетекта до сих пор читают именно server.cfg и не видят кастомные параметры заданные в config.json. Тем не менее, даже после любой возможной адаптации крашдетекта именно под омп сервер, "long_call_time" всё равно придётся отключать, т.к. ложных срабатываний у него больше, чем реальных обнаружений действительно медленных участков. Иными словами, реализовали недопиленную фичу и включили по умолчанию. От самп или омп сервера это там не зависит, чисто в крашдетекте проблема.


    Хм, ну можно тогда попытаться закинуть доработки в один или второй форк, поправив эту или предыдущую проблему там и там. Просто авторы их вроде уже давно не обновляют и не факт, что проверят эти правки и примут в ближайшем будущем.
    А если удалить итер Vehicle из Форка от Ziggi, и не использовать его? Сервер стартует после удаление функций PoolSize

  8. #8
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от quinsaiz Посмотреть сообщение
    А что делать с предупреждением? Ничего страшного? "long_call_time 0" по сути не помогло против подобного, сервер не стартует, мб стоит попробывать использовать старые версии crashdetect'a?
    Если сервер не запускается, значит есть какие-то другие, гораздо более серьёзные проблемы. Просмотри логи по-подробнее. Насчёт крашдетекта, можно юзать чуть более старые версии (до появления этой диагностики), либо попробовать вот эти чуть доработанные версии, где была пара фиксов как раз относительно последнего: https://github.com/Y-Less/samp-plugi...etect/releases (хотя я не уверен, что они всё ещё решают хоть какую-то значительную часть ложных срабатываний). В любом случае, "long_call_time 0" внутри server.cfg должно отключать эту функцию и на самп, и на омп сервере без каких-либо проблем.

    - - - Добавлено - - -

    Цитата Сообщение от quinsaiz Посмотреть сообщение
    А если удалить итер Vehicle из Форка от Ziggi, и не использовать его? Сервер стартует после удаление функций PoolSize
    А, значит твой сервер как раз и уходит в зависон из-за форка foreach от ziggi. Да, можешь попробовать фиксануть там это самостоятельно (и заодно тогда предложить это изменение в его репозиторий), но проще наверное заюзать форк от Kar.
    Последний раз редактировалось Nexius_Tailer; 18.01.2023 в 03:26.
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  9. #9
    Аватар для quinsaiz
    Пользователь

    Статус
    Оффлайн
    Регистрация
    13.03.2021
    Сообщений
    9
    Репутация:
    0 ±
    Цитата Сообщение от Nexius_Tailer Посмотреть сообщение
    Если сервер не запускается, значит есть какие-то другие, гораздо более серьёзные проблемы. Просмотри логи по-подробнее. Насчёт крашдетекта, можно юзать чуть более старые версии (до появления этой диагностики), либо попробовать вот эти чуть доработанные версии, где была пара фиксов как раз относительно последнего: https://github.com/Y-Less/samp-plugi...etect/releases (хотя я не уверен, что они всё ещё решают хоть какую-то значительную часть ложных срабатываний). В любом случае, "long_call_time 0" внутри server.cfg должно отключать эту функцию и на самп, и на омп сервере без каких-либо проблем.
    Сервер запустился с crashdetect`oм от Y_Less и foreach от Kar`a. Варнинг остался, наверное просто нужно будет переписать OnGameModeInit в форк от Kar`a, взять код из варианта от Ziggi

  10. #10
    Аватар для Nexius_Tailer
    Пользователь

    Статус
    Оффлайн
    Регистрация
    04.01.2015
    Адрес
    Гомель, Беларусь
    Сообщений
    547
    Репутация:
    158 ±
    Цитата Сообщение от quinsaiz Посмотреть сообщение
    Сервер запустился с crashdetect`oм от Y_Less и foreach от Kar`a. Варнинг остался, наверное просто нужно будет переписать OnGameModeInit в форк от Kar`a, взять код из варианта от Ziggi
    Насколько я помню, версии от Kar и от Ziggi довольно сильно разнятся. Если тебе нужны какие-то встроенные итераторы из версии Ziggi (их там вроде бы больше из коробки было), то это вообще не проблема просто добавить их вручную)
    Не хотите постоянно проверять обновления моих скриптов?
    Подключите его последним, после всех остальных
    Nexius's Update Checker

  11. Пользователь сказал cпасибо:
    quinsaiz (18.01.2023)
 

 
Страница 1 из 3 1 2 3 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •