Kraken\Runtime\Container\Manager\ThreadManagerBase::destroyThread PHP Method

destroyThread() public method

public destroyThread ( $alias, $flags = Runtime::DESTROY_FORCE_SOFT, $params = [] )
    public function destroyThread($alias, $flags = Runtime::DESTROY_FORCE_SOFT, $params = [])
    {
        if (!isset($this->threads[$alias])) {
            return Promise::doResolve("Thread [{$alias}] was not needed to be destroyed, because it had not existed.");
        }
        $thread = $this->threads[$alias];
        $manager = $this;
        if ($flags === Runtime::DESTROY_KEEP) {
            return Promise::doReject(new ResourceOccupiedException("Thread with alias [{$alias}] could not be destroyed with force leve=DESTROY_KEEP."));
        } else {
            if ($flags === Runtime::DESTROY_FORCE_SOFT) {
                $req = $this->createRequest($this->channel, $alias, new RuntimeCommand('container:destroy', $params));
                return $req->call()->then(function ($value) use($manager, $alias) {
                    usleep(1000.0);
                    $manager->freeThread($alias);
                    return $value;
                });
            } else {
                if ($flags === Runtime::DESTROY_FORCE) {
                    $manager = $this;
                    return $manager->destroyThread($alias, Runtime::DESTROY_FORCE_SOFT, $params)->then(null, function () use($manager, $alias, $params) {
                        return $manager->destroyThread($alias, Runtime::DESTROY_FORCE_HARD, $params);
                    });
                }
            }
        }
        if (!$thread->kill()) {
            return Promise::doReject(new ResourceOccupiedException("Thread [{$alias}] could not be killed forcefully."));
        }
        return Promise::doResolve()->then(function () use($manager, $alias) {
            $manager->freeThread($alias);
            return "Thread has been destroyed!";
        });
    }