[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#627235: libpoex-role-sessioninstantiation-perl: Can't locate object method "_set_id" via package "My::Session" at /usr/share/perl5/POE/Kernel.pm line 1399.


Le Saturday 9 June 2012 18:16:53, intrigeri a écrit :
> Anyone want to try to fix the code or the unit test?

Providing the missing method is quite easy:

diff --git a/lib/POEx/Role/SessionInstantiation/Meta/Session/Implementation.pm 
index 2ab316c..346a0e8 100644
--- a/lib/POEx/Role/SessionInstantiation/Meta/Session/Implementation.pm
+++ b/lib/POEx/Role/SessionInstantiation/Meta/Session/Implementation.pm
@@ -85,6 +85,7 @@ role POEx::Role::SessionInstantiation::Meta::Session::Implementation {
         is => 'ro',
         isa => Int,
         default => sub { $POE::Kernel::poe_kernel->ID_session_to_id($_[0]) },
+        writer => '_set_id' ,
         lazy => 1,

But, the tests still fail with this sad ending:

ok 14 - Stop called
please report this stacktrace to bug-poe@rt.cpan.org at /usr/share/perl5/POE/Kernel.pm line 1013
        POE::Kernel::_dispatch_event('POE::Kernel=ARRAY(0x1be9ee0)', undef, 'POE::Kernel=ARRAY(0x1be9ee0)', '_stop', 8, 
'ARRAY(0x1c03418)', '/usr/share/perl5/POE/Resource/Sessions.pm', 571, undef, ...) called at 
/usr/share/perl5/POE/Resource/Sessions.pm line 568
        POE::Kernel::_data_ses_stop('POE::Kernel=ARRAY(0x1be9ee0)', 'gandalf-4fd45c1f-000027a0-00000001') called at 
/usr/share/perl5/POE/Resource/Signals.pm line 533
        POE::Kernel::_data_sig_free_terminated_sessions('POE::Kernel=ARRAY(0x1be9ee0)') called at /usr/share/perl5/POE/Kernel.pm 
line 974
        POE::Kernel::_dispatch_event('POE::Kernel=ARRAY(0x1be9ee0)', 'POE::Kernel=ARRAY(0x1be9ee0)', 
'POE::Kernel=ARRAY(0x1be9ee0)', '_signal', 16, 'ARRAY(0x3b3ad28)', '/usr/share/perl5/POE/Kernel.pm', 635, undef, ...) called at 
/usr/share/perl5/POE/Resource/Events.pm line 315
        POE::Kernel::_data_ev_dispatch_due('POE::Kernel=ARRAY(0x1be9ee0)') called at /usr/share/perl5/POE/Loop/Select.pm line 309
        POE::Kernel::loop_do_timeslice('POE::Kernel=ARRAY(0x1be9ee0)') called at /usr/share/perl5/POE/Loop/Select.pm line 317
        POE::Kernel::loop_run('POE::Kernel=ARRAY(0x1be9ee0)') called at /usr/share/perl5/POE/Kernel.pm line 1235
        POE::Kernel::run('POE::Kernel') called at t/01-basic.t line 95
# Tests were run but no plan was declared and done_testing() was not seen.

POE bails out at the end of the test while mopping up sessions. 

Unfortunately, I do not know how to fix this: POEx::Role::SessionInstantiation 
re-implements (i.e. overrides) a lot of POE internals and uses waaaay beyong POE's
documented API. I can only guess that POE internals have changed (e,g, the introduction
of a new internal method: _set_id), and  POEx::Role::SessionInstantiation did not 
follow the change.

To fix this module one has to know POE internal, Moose, MooseX::Declare, overloading and whatnot.

Unless upstream author steps up, (hello Nicholas), I doubt that this module will be fixed in time 
for Debian 7.0

All the best


Attachment: signature.asc
Description: This is a digitally signed message part.

Reply to: