blob: 37506aa0948d5e676fdd305d635d9444f84dec78 [file] [log] [blame]
// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
#include "bin/native_service.h"
#include "platform/globals.h"
#include "bin/thread.h"
namespace dart {
namespace bin {
NativeService::NativeService(const char* name,
Dart_NativeMessageHandler handler,
int number_of_ports)
: name_(name),
handler_(handler),
service_ports_size_(number_of_ports),
service_ports_index_(0) {
service_ports_ = new Dart_Port[service_ports_size_];
for (int i = 0; i < service_ports_size_; i++) {
service_ports_[i] = ILLEGAL_PORT;
}
}
NativeService::~NativeService() {
delete[] service_ports_;
}
Dart_Port NativeService::GetServicePort() {
MutexLocker lock(&mutex_);
Dart_Port result = service_ports_[service_ports_index_];
if (result == ILLEGAL_PORT) {
result = Dart_NewNativePort(name_, handler_, true);
ASSERT(result != ILLEGAL_PORT);
service_ports_[service_ports_index_] = result;
}
service_ports_index_ = (service_ports_index_ + 1) % service_ports_size_;
return result;
}
} // namespace bin
} // namespace dart