@ProCxx

Страница 506 из 2477
Andrei
09.01.2017
13:44:43
Но не через тот же epoll/

Ты забрал сокет из еполла. вызвал epoll_ctl или как он там и удалил свой сокет оттуда.

дальше запустил подсчет хеша

хеш посчитался, сокет уже твой, можеш перевести его в блокирующий режим и отправить как обычно.

Google
Andrei
09.01.2017
13:46:02
ИЛИ

заведи внтури треда еполл и сложи туда.

И обрабатывай следующее соединение.

просто с отправкой данных на самом деле обычно проще.

Если это именно хеш, то это несколько байт.

Быстрее всего было бы сделать read, который едва ли заблокируется, потому что данные лягут в буфер системный

И потом сразу сделать send 0

и close на сокете.

Monday Begins on Saturday
09.01.2017
13:48:13
заведи внтури треда еполл и сложи туда.
Типа завести epoll на ожидание готовности к записи?

Andrei
09.01.2017
13:48:38
Да.

Monday Begins on Saturday
09.01.2017
13:53:22
?понял, спасибо огромное)

Dmitry
09.01.2017
13:54:18
а повангуйте плз по ехепшну *** 1483925505.967354 << Sent query magic 0xcc104937 size 24 seq 22385 *** 1483925506.029518 lua: attempt to call a nil value > *** Error in `./tg/bin/telegram-cli': malloc(): smallbin double linked list corrupted: 0x000000000f9aa100 *** и что сделать, чтобы оно было информативнее?

Andrei
09.01.2017
13:55:40
трейс очень маленький.

Google
Andrei
09.01.2017
13:55:54
Не понятно, какой квери выполнялся.

Если это телеграм, то надо указать layer

указать параметры запросы

Dmitry
09.01.2017
13:57:06
ну lay 57 перед вызовом lua принтом выводить?

Andrei
09.01.2017
13:57:57
Если ты отлаживаешься сейчас то да, выводи по максимуму всё.

Dmitry
09.01.2017
13:58:26
не отлаживаюсь. оно на серваке в скрине крутится и начало вываливаться зачем-то

Andrei
09.01.2017
13:58:42
attempt to call a nil value — вот это конечно супер.

Хотя бы строчку соотв. луа скрипта бы указать .__.

просто совсем не понятно что и где упало.

Dmitry
09.01.2017
13:59:16
а почему оно трейс не вывалило, кстати?

и что делать, чтобы вываливало

Andrei
09.01.2017
13:59:27
У меня тот же вопрос.

А, сорян, я думал это ТВОЙ код.

Если это не твой, то я не знаю. Поищи ключи запуска

может там есть -v

или —log=DEBUG

:)

Dmitry
09.01.2017
14:02:31
лучше конструкцию языка скажи для трейса. или может какие параметры компилятора за это отвечают. хотя с -ggdb собрано…

Evgeniy
09.01.2017
17:19:54
а дистанс что показывает?
Поменял код. if ((vec.size() > 0 && std::count(vec.begin(), vec.end(), vec.back()) >= 3) теперь. В векторе сидят uint_fast64_t. Кроме push'а в одном месте и pop'а в другом ничего не делаю. count доходит очень далеко за пределы вектора и счастливо падает с сегфолтом

Google
Evgeniy
09.01.2017
17:24:43
Reindex.. please wait
res += std::to_string(vec.size()); vec != tmp vec.push_back(x); vec.pop.back(); (vec.size() > 0 && std::count(vec.begin(), vec.end(), vec.back()) >= 3)

Всё

Andrei
09.01.2017
17:27:07
А в чем проблема?

Evgeniy
09.01.2017
17:28:09
А в чем проблема?
count сегфолтится далеко за концом вектора

Andrei
09.01.2017
17:28:40
А код какой?

Как вызывается count

Evgeniy
09.01.2017
17:28:59
Andrei
09.01.2017
17:29:45
Сколько элементов равны последнему.

смотри выше
Ну и что?

Andrei
09.01.2017
17:30:00
Там ничего не написано.

Я вижу 10 мест с проблемой.

Andrei
09.01.2017
17:30:33
Нужен код, который воспроизводит проблему.

Потому что из приведенного кода не видно проблемы.

То есть она, конечно, очевидна.

И я мог бы прям щас сказать, но это неинтересно :3

@EvgeniyZh

Хотя даже из приведенного огрызка о ней можно догадаться.

Где?

А, ты про std::count?

Google
Andrei
09.01.2017
17:35:27
F xnj nfv&

А что там?

Там всё верно

Andrei
09.01.2017
17:36:18
К тому же проблема не там, раз падает в count

Admin
ERROR: S client not available

Andrei
09.01.2017
17:36:31
ну намекни хоть
А код ты открыть не хочешь, да?

Surreal
09.01.2017
17:37:03
Reindex.. please wait

Andrei
09.01.2017
17:37:14
Нет.

Он ведь берет .end() и .begin()

:)

Evgeniy
09.01.2017
17:37:29
а до этого далеко..(

Andrei
09.01.2017
17:37:51
Ладно. Не буду кокетничать.

Короче. count падающий далеко за концом вектора — это инвалидированный вектор

Если ты возьмешь .size() непосредственно перед вызовом count

то увидишь, что он равен чему-нибудь здоровенному

Evgeniy
09.01.2017
17:38:50
6

Andrei
09.01.2017
17:38:51
А знаешь как я это понял?

Окей, значит один из указателей сломан

Google
Evgeniy
09.01.2017
17:39:05
он равен 6

из каких?

Andrei
09.01.2017
17:39:13
Да, тогда сломан не size

А end()

У тебя там выше написаны все строки содержащие твой вектор.

В том числе pop_back(0

Но строчки проверяющей число элементов у тебя нет!

Это значит, что ты спокойно мог отхватить проблему в pop_back

который лишний элемент попнул

и вызвал UB

pop_back у вектора НЕ ПРОВЕРЯЕТ empty

На пустом векторе это может вызвать UB в том числе в виде самого испорченного вектора.

Который проявляется в ебанутых итераторах.

Вот что бросается в глаза из твоих 4-х строчек и описания проблемы в виде count-а с segfault-oм

Очевидно, что в коде с count нет ошибки, значит, логическим исключением ошибка в vec

Инвалидированный вектор

Страница 506 из 2477