mirror of
https://github.com/hashicorp/vagrant.git
synced 2026-02-03 20:39:27 -05:00
74 lines
1.9 KiB
Ruby
74 lines
1.9 KiB
Ruby
# Copyright (c) HashiCorp, Inc.
|
|
# SPDX-License-Identifier: BUSL-1.1
|
|
|
|
require "mutex_m"
|
|
|
|
module VagrantPlugins
|
|
module CommandServe
|
|
module Util
|
|
# Helper class for tracking usage and handling
|
|
# activation and deactivation of usage based
|
|
# on count. Activation is only performed on
|
|
# the first request and deactivation is only
|
|
# performed on the final deactivation.
|
|
class UsageTracker
|
|
include Mutex_m
|
|
|
|
def initialize
|
|
super
|
|
@count = 0
|
|
end
|
|
|
|
# Activate usage. If a block is provided
|
|
# it will only be executed on initial
|
|
# activation (when count is zero).
|
|
#
|
|
# @yield Optional block to be executed
|
|
# @return [Boolean] true on initial activation
|
|
def activate
|
|
mu_synchronize do
|
|
if @count == 0 && block_given?
|
|
yield
|
|
end
|
|
@count += 1
|
|
|
|
return @count == 1
|
|
end
|
|
end
|
|
|
|
# Deactivate usage. If a block is provided
|
|
# it will only be exected on final deactivation
|
|
# (when count returns to zero). If the count
|
|
# is already zero, the block will not be
|
|
# executed.
|
|
#
|
|
# @yield Optional block to be executed
|
|
# @return [Boolean] true on final deactivation
|
|
def deactivate
|
|
mu_synchronize do
|
|
# If the count is already zero then
|
|
# we do nothing
|
|
return false if @count == 0
|
|
|
|
@count -= 1
|
|
if @count == 0 && block_given?
|
|
yield
|
|
end
|
|
|
|
return @count == 0
|
|
end
|
|
end
|
|
|
|
# @return [Boolean] usage is active
|
|
def active?
|
|
mu_synchronize { @count > 0 }
|
|
end
|
|
|
|
# @return [Boolean] usage is not active
|
|
def inactive?
|
|
!active?
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|