Automatically unload all modules and free up memory on VM release.
This commit is contained in:
		
							
								
								
									
										8
									
								
								vm.c
									
									
									
									
									
								
							
							
						
						
									
										8
									
								
								vm.c
									
									
									
									
									
								
							@@ -1465,6 +1465,14 @@ PH7_PRIVATE sxi32 PH7_VmReset(ph7_vm *pVm) {
 | 
				
			|||||||
 * Every virtual machine must be destroyed in order to avoid memory leaks.
 | 
					 * Every virtual machine must be destroyed in order to avoid memory leaks.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
PH7_PRIVATE sxi32 PH7_VmRelease(ph7_vm *pVm) {
 | 
					PH7_PRIVATE sxi32 PH7_VmRelease(ph7_vm *pVm) {
 | 
				
			||||||
 | 
						VmModule *pEntry;
 | 
				
			||||||
 | 
						/* Iterate through modules list */
 | 
				
			||||||
 | 
						while(SySetGetNextEntry(&pVm->aModules, (void **)&pEntry) == SXRET_OK) {
 | 
				
			||||||
 | 
							/* Unload the module */
 | 
				
			||||||
 | 
							dlclose(pEntry->pHandle);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						/* Free up the heap */
 | 
				
			||||||
 | 
						SySetRelease(&pVm->aModules);
 | 
				
			||||||
	/* Set the stale magic number */
 | 
						/* Set the stale magic number */
 | 
				
			||||||
	pVm->nMagic = PH7_VM_STALE;
 | 
						pVm->nMagic = PH7_VM_STALE;
 | 
				
			||||||
	/* Release the private memory subsystem */
 | 
						/* Release the private memory subsystem */
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user