Merge pull request #182 from kiraly533/v1.4

- MMS server: fixed possible crash when client disconnects during fil…
pull/183/head
Michael Zillgith 6 years ago committed by GitHub
commit 8b6e4b0b29
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -85,6 +85,8 @@
#define MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_DESTINATION 9 #define MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_DESTINATION 9
#define MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_RESPONSE 10 #define MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_RESPONSE 10
#define MMS_FILE_UPLOAD_STATE_INTERRUPTED 11
typedef struct sMmsObtainFileTask* MmsObtainFileTask; typedef struct sMmsObtainFileTask* MmsObtainFileTask;
struct sMmsObtainFileTask { struct sMmsObtainFileTask {

@ -427,6 +427,7 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
task->state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE; task->state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE;
FileSystem_closeFile(task->fileHandle); FileSystem_closeFile(task->fileHandle);
task->fileHandle = NULL;
deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename); deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename);
} }
} }
@ -465,6 +466,7 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
task->state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE; task->state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE;
FileSystem_closeFile(task->fileHandle); FileSystem_closeFile(task->fileHandle);
task->fileHandle = NULL;
deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename); deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename);
} }
@ -502,6 +504,7 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
task->state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE; task->state = MMS_FILE_UPLOAD_STATE_SEND_OBTAIN_FILE_ERROR_SOURCE;
FileSystem_closeFile(task->fileHandle); FileSystem_closeFile(task->fileHandle);
task->fileHandle = NULL;
deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename); deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename);
} }
@ -525,6 +528,7 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
IsoConnection_unlock(task->connection->isoConnection); IsoConnection_unlock(task->connection->isoConnection);
FileSystem_closeFile(task->fileHandle); FileSystem_closeFile(task->fileHandle);
task->fileHandle = NULL;
deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename); deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename);
if (DEBUG_MMS_SERVER) if (DEBUG_MMS_SERVER)
@ -552,6 +556,7 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
if (task->fileHandle) { if (task->fileHandle) {
FileSystem_closeFile(task->fileHandle); FileSystem_closeFile(task->fileHandle);
task->fileHandle = NULL;
if (task->destinationFilename) if (task->destinationFilename)
deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename); deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename);
@ -585,6 +590,19 @@ mmsServer_fileUploadTask(MmsServer self, MmsObtainFileTask task)
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED; task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
} }
break; break;
case MMS_FILE_UPLOAD_STATE_INTERRUPTED:
{
if (DEBUG_MMS_SERVER)
printf("MMS_SERVER: file service interrupted, due to client disconnection\n");
if (task->fileHandle){
FileSystem_closeFile(task->fileHandle);
task->fileHandle = NULL;
if (task->destinationFilename)
deleteFile(MmsServerConnection_getFilesystemBasepath(task->connection), task->destinationFilename);
}
task->state = MMS_FILE_UPLOAD_STATE_NOT_USED;
}
break;
} }
} }
@ -602,12 +620,8 @@ mmsServerConnection_stopFileUploadTasks(MmsServerConnection self)
if (server->fileUploadTasks[i].state != 0) { if (server->fileUploadTasks[i].state != 0) {
if (server->fileUploadTasks[i].connection == self) { if (server->fileUploadTasks[i].connection == self) {
/* stop file upload task */ /* stop file upload task */
FileSystem_closeFile(server->fileUploadTasks[i].fileHandle); server->fileUploadTasks[i].state = MMS_FILE_UPLOAD_STATE_INTERRUPTED;
deleteFile(MmsServerConnection_getFilesystemBasepath(self), server->fileUploadTasks[i].destinationFilename);
server->fileUploadTasks[i].state = 0;
} }
} }

Loading…
Cancel
Save