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()
{
_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);