From 5615edfd4d0c4a99a2da290cfb3adc6ce6ad9de4 Mon Sep 17 00:00:00 2001 From: Ingo Weinhold Date: Fri, 30 Dec 2005 03:34:37 +0000 Subject: [PATCH] The server lazily opens the disk image now and closes and reopens it when receiving a HELLO request. Thus it doesn't need to be restarted when the image had been rebuilt. That was a bit annoying... git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15735 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../remote_disk_server/remote_disk_server.cpp | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/tools/remote_disk_server/remote_disk_server.cpp b/src/tools/remote_disk_server/remote_disk_server.cpp index c4111dea5b..6b009bacc3 100644 --- a/src/tools/remote_disk_server/remote_disk_server.cpp +++ b/src/tools/remote_disk_server/remote_disk_server.cpp @@ -61,7 +61,6 @@ public: int Run() { - _OpenImage(); _CreateSocket(); // main server loop @@ -117,8 +116,18 @@ public: } private: - void _OpenImage() + void _OpenImage(bool reopen) { + // already open? + if (fImageFD >= 0) { + if (!reopen) + return; + + close(fImageFD); + fImageFD = -1; + fImageSize = 0; + } + // open the image fImageFD = open(fImagePath, O_RDWR); if (fImageFD < 0) { @@ -163,6 +172,8 @@ private: { printf("HELLO request\n"); + _OpenImage(true); + remote_disk_header reply; reply.offset = htonll(fImageSize); @@ -172,6 +183,8 @@ private: void _HandleReadRequest() { + _OpenImage(false); + char buffer[2048]; remote_disk_header *reply = (remote_disk_header*)buffer; uint64_t offset = ntohll(fRequest->offset); @@ -214,6 +227,8 @@ private: void _HandleWriteRequest() { + _OpenImage(false); + remote_disk_header reply; uint64_t offset = ntohll(fRequest->offset); int16_t size = ntohs(fRequest->size);