Index: runtime/bin/directory.cc |
diff --git a/runtime/bin/directory.cc b/runtime/bin/directory.cc |
index a4b5e084350a943209271ed0c524e9ba4fcf2e34..1493b2d4fe0efa16061ff8c164c2fd33448b6810 100644 |
--- a/runtime/bin/directory.cc |
+++ b/runtime/bin/directory.cc |
@@ -9,10 +9,14 @@ |
#include "include/dart_api.h" |
#include "platform/assert.h" |
-dart::Mutex Directory::mutex_; |
-int Directory::service_ports_size_ = 0; |
-Dart_Port* Directory::service_ports_ = NULL; |
-int Directory::service_ports_index_ = 0; |
+ |
+// Forward declaration. |
+static void DirectoryService(Dart_Port, Dart_Port, Dart_CObject*); |
+ |
+NativeService Directory::directory_service_("DirectoryService", |
+ DirectoryService, |
+ 16); |
+ |
void FUNCTION_NAME(Directory_Current)(Dart_NativeArguments args) { |
Dart_EnterScope(); |
@@ -236,10 +240,10 @@ static CObject* DirectoryRenameRequest(const CObjectArray& request, |
} |
-void DirectoryService(Dart_Port dest_port_id, |
- Dart_Port reply_port_id, |
- Dart_CObject* message) { |
- CObject* response = CObject::False(); |
+static void DirectoryService(Dart_Port dest_port_id, |
+ Dart_Port reply_port_id, |
+ Dart_CObject* message) { |
+ CObject* response = CObject::IllegalArgumentError(); |
CObjectArray request(message); |
if (message->type == Dart_CObject::kArray) { |
if (request.Length() > 1 && request[0]->IsInt32()) { |
@@ -274,27 +278,7 @@ void DirectoryService(Dart_Port dest_port_id, |
Dart_Port Directory::GetServicePort() { |
- MutexLocker lock(&mutex_); |
- if (service_ports_size_ == 0) { |
- ASSERT(service_ports_ == NULL); |
- service_ports_size_ = 16; |
- service_ports_ = new Dart_Port[service_ports_size_]; |
- service_ports_index_ = 0; |
- for (int i = 0; i < service_ports_size_; i++) { |
- service_ports_[i] = ILLEGAL_PORT; |
- } |
- } |
- |
- Dart_Port result = service_ports_[service_ports_index_]; |
- if (result == ILLEGAL_PORT) { |
- result = Dart_NewNativePort("DirectoryService", |
- DirectoryService, |
- true); |
- ASSERT(result != ILLEGAL_PORT); |
- service_ports_[service_ports_index_] = result; |
- } |
- service_ports_index_ = (service_ports_index_ + 1) % service_ports_size_; |
- return result; |
+ return directory_service_.GetServicePort(); |
} |
@@ -342,14 +326,16 @@ bool AsyncDirectoryListing::HandleError(const char* dir_name) { |
bool SyncDirectoryListing::HandleDirectory(char* dir_name) { |
Dart_Handle dir_name_dart = DartUtils::NewString(dir_name); |
- Dart_Handle dir = Dart_New(directory_class_, Dart_Null(), 1, &dir_name_dart); |
+ Dart_Handle dir = |
+ Dart_New(directory_class_, Dart_Null(), 1, &dir_name_dart); |
Dart_Invoke(results_, add_string_, 1, &dir); |
return true; |
} |
bool SyncDirectoryListing::HandleFile(char* file_name) { |
Dart_Handle file_name_dart = DartUtils::NewString(file_name); |
- Dart_Handle file = Dart_New(file_class_, Dart_Null(), 1, &file_name_dart); |
+ Dart_Handle file = |
+ Dart_New(file_class_, Dart_Null(), 1, &file_name_dart); |
Dart_Invoke(results_, add_string_, 1, &file); |
return true; |
} |