DiegoEmilio01 / IIC3413

Repositorio del curso Implementación de Sistemas de Bases de Datos
16 stars 1 forks source link

Error al terminar de iterar: Assertion frames[i].pins == 0 failed. #27

Open Agustinuv opened 5 months ago

Agustinuv commented 5 months ago

Holaa, no sé por qué cuando corro por primera vez el código (sin datos cargados) pareciera funcionar todo correctamente, insertando e iterando bien. Pero al terminar de iterar sale este error: image

Está bien que retorne false, porque la página está fuera del rango, pero no se por qué se cae. Si corro el código de nuevo el error no aparece :(

cirojas commented 5 months ago

La función flush() donde el assert falla se ejecuta al terminar el programa, y el objetivo del assert es asegurarse que se dejó de ocupar correctamente todas las páginas que se le pidieron al buffer manager. Esto pasa porque en alguna parte haces pin y no haces el unpin correspondiente. El pin lo puedes llamar directamente y también se hace automáticamente al hacer buffer_mgr.get_page y buffer_mgr.append_page. Si no añadiste manualmente una llamada a pin() ni eliminaste el unpin() de un destructor lo único que se me ocurre que puede pasar es que construyes un objeto que usa una página (IsamNonClusteredLeaf, IsamNonClusteredDir o HeapFilePage) y este objeto no se destruye por un error en tu flujo (por ejemplo llamar a new de uno de esos objetos sin su respectivo delete).