Over the last two days I was chasing a bug in my re-written mp3-player. Eventually with the help of
Carp::confess I was able to see what was going on: A method received an additional argument although this was impossible. The line that
confess included in its stacktrace was this:
my $pattern = $self->get_input($state, $compl ? $compl : $state->search);
This call, according to
confess, resulted in
ActionLoop::search(ActionLoop=HASH(0x814cbb8), 1). I wonder under which contrived circumstances
$obj->method can produce an additional argument.
$state->search() did not fix it. The only way was passing
Unfortunately, there's no obvious way for me to report this bug as the bigger picture includes three methods of which one calls the other sort of tail-recursively using
goto &func. I am very sure that the bug immediately disappears when I try to strip it down enough to include it in a bug report.
On an entirely different front, I polished up my freshly installed Debian a little. I can finally watch TV. It turned out that these deadlocks were produced by an apparently buggy Nvidia driver. Using an older one fixed it. The amazing thing is that my whole Debian partition is only filled with 1.3GB of data and it can do everything that my Linux from scratch could do with 26GB. As a result, it's blazingly fast even though Debian comes with no packages that were compiled with the optimization settings that I used for Linux from scratch. Even the default perl (which is an ithreaded one) feels quicker than the non-threaded Linux-from-scratch-counterpart.