================ idFileSystemLocal::Shutdown Frees all resources and closes all files ================ */
| 2747 | ================ |
| 2748 | */ |
| 2749 | void idFileSystemLocal::Shutdown( bool reloading ) { |
| 2750 | searchpath_t *sp, *next, *loop; |
| 2751 | |
| 2752 | backgroundThread_exit = true; |
| 2753 | Sys_TriggerEvent(); |
| 2754 | Sys_DestroyThread(backgroundThread); |
| 2755 | backgroundThread_exit = false; |
| 2756 | |
| 2757 | gameFolder.Clear(); |
| 2758 | |
| 2759 | serverPaks.Clear(); |
| 2760 | if ( !reloading ) { |
| 2761 | restartChecksums.Clear(); |
| 2762 | addonChecksums.Clear(); |
| 2763 | } |
| 2764 | loadedFileFromDir = false; |
| 2765 | |
| 2766 | ClearDirCache(); |
| 2767 | |
| 2768 | // free everything - loop through searchPaths and addonPaks |
| 2769 | for ( loop = searchPaths; loop; loop == searchPaths ? loop = addonPaks : loop = NULL ) { |
| 2770 | for ( sp = loop; sp; sp = next ) { |
| 2771 | next = sp->next; |
| 2772 | |
| 2773 | if ( sp->pack ) { |
| 2774 | unzClose( sp->pack->handle ); |
| 2775 | delete [] sp->pack->buildBuffer; |
| 2776 | if ( sp->pack->addon_info ) { |
| 2777 | sp->pack->addon_info->mapDecls.DeleteContents( true ); |
| 2778 | delete sp->pack->addon_info; |
| 2779 | } |
| 2780 | delete sp->pack; |
| 2781 | } |
| 2782 | if ( sp->dir ) { |
| 2783 | delete sp->dir; |
| 2784 | } |
| 2785 | delete sp; |
| 2786 | } |
| 2787 | } |
| 2788 | |
| 2789 | // any FS_ calls will now be an error until reinitialized |
| 2790 | searchPaths = NULL; |
| 2791 | addonPaks = NULL; |
| 2792 | |
| 2793 | cmdSystem->RemoveCommand( "path" ); |
| 2794 | cmdSystem->RemoveCommand( "dir" ); |
| 2795 | cmdSystem->RemoveCommand( "dirtree" ); |
| 2796 | cmdSystem->RemoveCommand( "touchFile" ); |
| 2797 | |
| 2798 | mapDict.Clear(); |
| 2799 | } |
| 2800 | |
| 2801 | /* |
| 2802 | ================ |
nothing calls this directly
no test coverage detected