
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

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 доходит очень далеко за пределы вектора и счастливо падает с сегфолтом

Surreal
09.01.2017
17:23:47

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

Andrei
09.01.2017
17:28:40
А код какой?
Как вызывается count

Evgeniy
09.01.2017
17:28:59

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

Evgeniy
09.01.2017
17:29:57

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&
А что там?
Там всё верно

Evgeniy
09.01.2017
17:36:17

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
Инвалидированный вектор