Fix memory leaks and code cleanup
This commit is contained in:
		| @@ -47,6 +47,7 @@ void delete(DiskQueue *queue, DiskRequest request) { | |||||||
| 				previous->next = current->next; | 				previous->next = current->next; | ||||||
| 			} | 			} | ||||||
| 			queue->size--; | 			queue->size--; | ||||||
|  | 			free(current); | ||||||
| 			return; | 			return; | ||||||
| 		} | 		} | ||||||
| 		previous = current; | 		previous = current; | ||||||
| @@ -60,11 +61,11 @@ DiskRequest peek(DiskQueue *queue) { | |||||||
| 	return *queue->head; | 	return *queue->head; | ||||||
| } | } | ||||||
|  |  | ||||||
| DiskRequest dequeue(DiskQueue *queue) { | DiskRequest *dequeue(DiskQueue *queue) { | ||||||
| 	DiskRequest *head = queue->head; | 	DiskRequest *head = queue->head; | ||||||
| 	queue->head = head->next; | 	queue->head = head->next; | ||||||
| 	queue->size--; | 	queue->size--; | ||||||
| 	return *head; | 	return head; | ||||||
| } | } | ||||||
|  |  | ||||||
| void destroyDiskQueue(DiskQueue *queue) { | void destroyDiskQueue(DiskQueue *queue) { | ||||||
|   | |||||||
| @@ -23,7 +23,7 @@ void delete(DiskQueue *queue, DiskRequest request); | |||||||
|  |  | ||||||
| DiskRequest peek(DiskQueue *queue); | DiskRequest peek(DiskQueue *queue); | ||||||
|  |  | ||||||
| DiskRequest dequeue(DiskQueue *queue); | DiskRequest *dequeue(DiskQueue *queue); | ||||||
|  |  | ||||||
| DiskRequest *findClosest(DiskQueue *queue, int position, double time); | DiskRequest *findClosest(DiskQueue *queue, int position, double time); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -36,11 +36,12 @@ int diskMovement(int position, int destination) { | |||||||
| void fcfs(int start) { | void fcfs(int start) { | ||||||
| 	int position = start; | 	int position = start; | ||||||
| 	while (queue->size > 0) { | 	while (queue->size > 0) { | ||||||
| 		DiskRequest request = dequeue(queue); | 		DiskRequest *request = dequeue(queue); | ||||||
| 		while (seekTime < request.time) { seekTime++; } | 		while (seekTime < request->time) { seekTime++; } | ||||||
| 		seekTime += timeToProcessRequest(position, request.position); | 		seekTime += timeToProcessRequest(position, request->position); | ||||||
| 		movement += diskMovement(position, request.position); | 		movement += diskMovement(position, request->position); | ||||||
| 		position = request.position; | 		position = request->position; | ||||||
|  | 		free(request); | ||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| @@ -53,11 +54,9 @@ void cscan(int start) { | |||||||
| 			seekTime++; | 			seekTime++; | ||||||
| 		} else { | 		} else { | ||||||
| 			if (request->position < position) { | 			if (request->position < position) { | ||||||
| 				seekTime += timeToProcessRequest(position, 9999); | 				// + 1 simulates the time it takes to move to the end of the disk (it is a circular disk) | ||||||
| 				movement += diskMovement(position, 9999); | 				seekTime += timeToProcessRequest(position, 9999 + 1); | ||||||
| 				// Special case for when we are at the end of the disk, wrap around to the beginning | 				movement += diskMovement(position, 9999 + 1); | ||||||
| 				seekTime += timeToProcessRequest(9999, 10000); // 10000 is the beginning of the disk |  | ||||||
| 				movement += diskMovement(9999, 10000); |  | ||||||
| 				position = 0; | 				position = 0; | ||||||
| 				// Rescan for closest, so we can efficiently handle requests | 				// Rescan for closest, so we can efficiently handle requests | ||||||
| 				request = findClosest(queue, position, seekTime); | 				request = findClosest(queue, position, seekTime); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user