| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Perl: Общие вопросы > AnyEvent и TLS |
| Автор: slavenk 29.7.2013, 11:00 | ||
| Здравствуйте! При запуске вот такого кода:
выдается следующая ошибка: Yes (in cleanup) Can't call method "_put_session" on an undefined value at /usr/local/lib64/perl5/AnyEvent/Handle.pm line 2163 during global destruction. Подскажите пожайлуста, в чем может быть проблема? |
| Автор: arto 29.7.2013, 11:10 |
| tls контекст отсутствует, как я понимаю. посмотреите, как реализовано в AnyEvent::TLS. |
| Автор: slavenk 29.7.2013, 12:28 | ||
Попробовал так реализовать, не получилось
|
| Автор: slavenk 29.7.2013, 13:47 | ||
| Может быть проблема в том, что рекомендуемая версия Net::SSLeay 1.35, а у меня 1.55? AnyEvent::TLS
|
| Автор: arto 30.7.2013, 07:27 |
| не думаю. |
| Автор: slavenk 30.7.2013, 10:56 |
| Проблему решил - не нужно использовать ключ -w в первой строке. Лучше писать use warnings; |
| Автор: arto 30.7.2013, 12:30 |
| мусор под ковёр? неплохо, неплохо |
| Автор: slavenk 31.7.2013, 15:02 |
| не совсем так - здесь особенность работы с глобальными деструкторами в Perl. Вот что написал Marc Lehmann по этому поводу: First of all, you are using -w. This switch forces a set of warnings on every piece of code, even code that doesn't want or need those warnings. If you run with -w, and you get warnings, you have to deal with them: the original aithor did not enable them, so when you do, you effectively take over maintainership. So netter don't run with -w if you don't want to deal with warnings in other people's code. Second, this is a bug in perl - during global destruction, perl can randomly corrupt data structures, which sometimes causes messages like these. Это поведение документировано: https://metacpan.org/module/RJBS/perl-5.18.0/pod/perlobj.pod#Global-Destruction , поэтому это не баг, а фича |
| Автор: ginnie 31.7.2013, 15:20 |
| slavenk, больше похоже на особенность некоторых разработчиков сваливать вину на всех, кроме себя. Тут явная ошибка в коде. Можно ее исправить, а можно сделать вид, что ее нет P.S. пару лет назад имел "удовольствие" пообщаться с Марком по поводу ошибок в AnyEvent, после этого пользуюсь чистым EV. |
| Автор: arto 31.7.2013, 15:22 |
| "You should check that a contained object is defined before calling a method on it" и $self->{tls_ctx}->_put_session (delete $self->{tls}) if $self->{tls} > 0; не сочетается. А в связи с индивидуальными особенностями лехмана, вряд-ли будет пофиксена в ближайшем будущем. |
| Автор: ginnie 31.7.2013, 15:50 |
А я и не говорил, что модулями Марка не стоит пользоваться. В EV я ошибок пока не нашел, поэтому пользуюсь. Я писал про особенности общения с ним, а также про его желание что-либо исправлять. |
| Автор: ginnie 31.7.2013, 16:06 | ||
| Кстати, ошибка не такая уж и безобидная, насколько я понимаю, после нее уже остальные деструкторы в коде не вызываются. Был неправ:
|