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
This commit is contained in:
Ingo Weinhold
2005-12-30 03:34:37 +00:00
parent 1ae8b8cd19
commit 5615edfd4d
@@ -61,7 +61,6 @@ public:
int Run() int Run()
{ {
_OpenImage();
_CreateSocket(); _CreateSocket();
// main server loop // main server loop
@@ -117,8 +116,18 @@ public:
} }
private: private:
void _OpenImage() void _OpenImage(bool reopen)
{ {
// already open?
if (fImageFD >= 0) {
if (!reopen)
return;
close(fImageFD);
fImageFD = -1;
fImageSize = 0;
}
// open the image // open the image
fImageFD = open(fImagePath, O_RDWR); fImageFD = open(fImagePath, O_RDWR);
if (fImageFD < 0) { if (fImageFD < 0) {
@@ -163,6 +172,8 @@ private:
{ {
printf("HELLO request\n"); printf("HELLO request\n");
_OpenImage(true);
remote_disk_header reply; remote_disk_header reply;
reply.offset = htonll(fImageSize); reply.offset = htonll(fImageSize);
@@ -172,6 +183,8 @@ private:
void _HandleReadRequest() void _HandleReadRequest()
{ {
_OpenImage(false);
char buffer[2048]; char buffer[2048];
remote_disk_header *reply = (remote_disk_header*)buffer; remote_disk_header *reply = (remote_disk_header*)buffer;
uint64_t offset = ntohll(fRequest->offset); uint64_t offset = ntohll(fRequest->offset);
@@ -214,6 +227,8 @@ private:
void _HandleWriteRequest() void _HandleWriteRequest()
{ {
_OpenImage(false);
remote_disk_header reply; remote_disk_header reply;
uint64_t offset = ntohll(fRequest->offset); uint64_t offset = ntohll(fRequest->offset);
int16_t size = ntohs(fRequest->size); int16_t size = ntohs(fRequest->size);