Beispiel #1
0
void
ASCloseOnExec()
{
LOCAL_DEBUG_OUT( "pid(%d),shutting down modukes...", getpid() );
    ShutdownModules(True);
LOCAL_DEBUG_OUT( "pid(%d),closing x_fd...", getpid() );
    if( x_fd )
        close(x_fd);
LOCAL_DEBUG_OUT( "pid(%d),complete...", getpid() );
}
//-----------------------------------------------------------------------------
// Purpose: Shuts down all tools
// Input  :  - 
//-----------------------------------------------------------------------------
void CToolFrameworkInternal::ShutdownTools()
{
	// Deactivate tool
	SwitchToTool( -1 );

	// Reverse order
	int i;
	int toolCount = m_ToolSystems.Count();
	for ( i = toolCount - 1; i >= 0; --i )
	{
		IToolSystem *system = m_ToolSystems[ i ];
		system->Shutdown();
	}

	m_ToolSystems.RemoveAll();

	ShutdownToolDictionaries();
	ShutdownModules();
}
Beispiel #3
0
void
Done (Bool restart, char *command )
{
    int restart_screen = get_flags( AfterStepState, ASS_SingleScreen)?Scr.screen:-1;
	Bool restart_self = False ; 
    char *local_command = NULL ;
	{
		static int already_dead = False ; 
		if( already_dead ) 	return;/* non-reentrant function ! */
		already_dead = True ;
	}

    /* lets duplicate the string so we don't accidental;y delete it while closing self down */
    if( restart )
	{
		int my_name_len = strlen(MyName);
		if( command ) 
		{
			if( strncmp(command, MyName, my_name_len )==0 )
				restart_self = (command[my_name_len] == ' '|| command[my_name_len] == '\0');
			local_command = mystrdup(command);
		}else 
		{		  
        	local_command = mystrdup(MyName);
			restart_self = True ;
	    }
		if (!is_executable_in_path(local_command))
		{
			if (!restart_self || MyArgs.saved_argv[0] == NULL)
			{
				show_error("Cannot restart with command \"%s\" - application is not in PATH!", local_command);
				return;
			}
			free(local_command);
			if (command)
			{
				local_command = safemalloc(strlen(command) + 1+ strlen(MyArgs.saved_argv[0])+1);
				sprintf( local_command, "%s %s", MyArgs.saved_argv[0], command + my_name_len);
			}else
				local_command = mystrdup(MyArgs.saved_argv[0]);
		}
	}


#ifdef XSHMIMAGE
	/* may not need to do that as server may still have some of the shared 
	 * memory and work in it */
	flush_shm_cache();
#endif

LOCAL_DEBUG_CALLER_OUT( "%s restart, cmd=\"%s\"", restart?"Do":"Don't", command?command:"");

	XSelectInput( dpy, Scr.Root, 0 );	   
	SendPacket (-1, M_SHUTDOWN, 0);
	FlushAllQueues(); 
	sleep_a_millisec(1000);

	LOCAL_DEBUG_OUT( "local_command = \"%s\", restart_self = %s", local_command, restart_self?"Yes":"No"); 
    set_flags( AfterStepState, ASS_Shutdown );
    if( restart )
        set_flags( AfterStepState, ASS_Restarting );
    clear_flags( AfterStepState, ASS_NormalOperation );
#ifndef NO_VIRTUAL
    MoveViewport (0, 0, False);
#endif
#ifndef NO_SAVEWINDOWS
	if (!restart)
    {
        char *fname = make_session_file( Session, AFTER_SAVE, False );
        save_aswindow_list( Scr.Windows, NULL );
        free( fname );
    }
#endif

	/* Close all my pipes */
    ShutdownModules(False);

    desktop_cover_cleanup();
    
	/* remove window frames */
    CleanupScreen();
    /* Really make sure that the connection is closed and cleared! */
    XSync (dpy, 0);

	if (ASDBus_fd>=0)
		asdbus_shutdown();

#ifdef XSHMIMAGE
	flush_shm_cache();
#endif
	if (restart)
	{
		set_flags( MyArgs.flags, ASS_Restarting );
        spawn_child( local_command, -1, restart_screen, original_DISPLAY_string,
                     None, C_NO_CONTEXT, False, restart_self, NULL );
    } else
	{

	    XCloseDisplay (dpy);
		dpy = NULL ;

		/* freeing up memory */
		DestroyPendingFunctionsQueue();
		DestroyCategories();

	    cleanup_default_balloons();
		destroy_asdatabase();
    	destroy_assession( Session );
		destroy_asenvironment( &Environment );
    	/* pixmap references */
    	build_xpm_colormap (NULL);

		free_scratch_ids_vector();
		free_scratch_layers_vector();		
        clientprops_cleanup ();
        wmprops_cleanup ();

        free_func_hash();
		flush_keyword_ids();
        purge_asimage_registry();
	
		asxml_var_cleanup();
		custom_color_cleanup(); 

        free_as_app_args();
		free( ASDefaultScr );

		flush_default_asstorage();
        flush_asbidirlist_memory_pool();
        flush_ashash_memory_pool();
#ifdef DEBUG_ALLOCS
        print_unfreed_mem ();
#endif /*DEBUG_ALLOCS */
#ifdef XSHMIMAGE
		flush_shm_cache();
#endif
    
	}
    exit(0);
}