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:
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user