summaryrefslogtreecommitdiff
path: root/lib/VNDB/Util/Misc.pm
blob: 94cdcd1ec3843b17d3291c226e4f6d9e05d82c3d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

package VNDB::Util::Misc;

use strict;
use warnings;
use Exporter 'import';
use Tie::ShareLite ':lock';

our @EXPORT = qw|multiCmd|;


# Sends a command to Multi
# Argument: the commands to add to the queue, or none to send the queue to Multi
sub multiCmd {
  my $self = shift;

  $self->{_multiCmd} = [] if !$self->{_multiCmd};
  return push @{$self->{_multiCmd}}, @_ if @_;

  return if !@{$self->{_multiCmd}};

  my $s = tie my %s, 'Tie::ShareLite', -key => $self->{sharedmem_key}, -create => 'yes', -destroy => 'no', -mode => 0666;
  $s->lock(LOCK_EX);
  my @q = ( ($s{queue} ? @{$s{queue}} : ()), @{$self->{_multiCmd}} );
  $s{queue} = \@q;
  $s->unlock();
  $self->{_multiCmd} = [];
}