Fix stopping logger thread for real.

This commit is contained in:
Daniel Nichter
2013-05-19 12:46:47 -07:00
parent 52d9a91b4d
commit 52e37e2dc2
2 changed files with 7 additions and 5 deletions

View File

@@ -4869,7 +4869,7 @@ sub enable_online_logging {
&& $max_log_entries-- && $max_log_entries--
&& (my $entry = $self->_message_queue->dequeue()) ) && (my $entry = $self->_message_queue->dequeue()) )
{ {
if ( scalar @$entry ) { if ( defined $entry->[0] ) {
push @log_entries, Percona::WebAPI::Resource::LogEntry->new( push @log_entries, Percona::WebAPI::Resource::LogEntry->new(
log_level => $entry->[0], log_level => $entry->[0],
message => $entry->[1], message => $entry->[1],
@@ -4978,7 +4978,8 @@ sub _log {
sub DESTROY { sub DESTROY {
my $self = shift; my $self = shift;
if ( $self->online_logging ) { if ( $self->online_logging ) {
$self->_message_queue->enqueue( () ); # stop thread's while loop my @stop :shared = (undef, undef);
$self->_message_queue->enqueue(\@stop); # stop the thread
$self->_thread->join(); $self->_thread->join();
} }
return; return;

View File

@@ -99,14 +99,14 @@ sub enable_online_logging {
&& (my $entry = $self->_message_queue->dequeue()) ) && (my $entry = $self->_message_queue->dequeue()) )
{ {
# $entry = [ level, "message" ] # $entry = [ level, "message" ]
if ( scalar @$entry ) { if ( defined $entry->[0] ) {
push @log_entries, Percona::WebAPI::Resource::LogEntry->new( push @log_entries, Percona::WebAPI::Resource::LogEntry->new(
log_level => $entry->[0], log_level => $entry->[0],
message => $entry->[1], message => $entry->[1],
); );
} }
else { else {
# empty entry = stop # Got "stop" entry: [ undef, undef ]
$oktorun = 0; $oktorun = 0;
} }
} }
@@ -210,7 +210,8 @@ sub _log {
sub DESTROY { sub DESTROY {
my $self = shift; my $self = shift;
if ( $self->online_logging ) { if ( $self->online_logging ) {
$self->_message_queue->enqueue( () ); # stop thread's while loop my @stop :shared = (undef, undef);
$self->_message_queue->enqueue(\@stop); # stop the thread
$self->_thread->join(); $self->_thread->join();
} }
return; return;