Example #1
0
/**
 * Release resources
 */
static void scmpc_cleanup(void)
{
	g_source_remove(signal_source);
	if (prefs.cache_interval > 0)
		g_source_remove(cache_save_source);
	if (mpd.idle_source > 0)
		g_source_remove(mpd.idle_source);
	if (mpd.check_source > 0)
		g_source_remove(mpd.check_source);
	if (mpd.reconnect_source > 0)
		g_source_remove(mpd.reconnect_source);

	if (current_song_eligible_for_submission())
		queue_add_current_song();
	if (prefs.fork)
		scmpc_pid_remove();
	close_signal_pipe();
	if (prefs.cache_interval > 0)
		queue_save(NULL);
	queue_cleanup();
	if (mpd.song_pos)
		g_timer_destroy(mpd.song_pos);
	clear_preferences();
	as_cleanup();
	if (mpd.conn != NULL)
		mpd_connection_free(mpd.conn);
}
Example #2
0
static void
destroy(void)
{
	g_message("Exiting");
	as_save_cache();
	as_cleanup();
	http_client_finish();
	file_cleanup();
	g_timer_destroy(timer);
	g_source_remove(save_source_id);
	if (prev != NULL)
		mpd_song_free(prev);
}
Example #3
0
int main(int argc, char **argv)
{
    daemonize_close_stdin();

    parse_cmdline(argc, argv);

    if (!file_read_config())
        g_error("cannot read configuration file\n");

    log_init(file_config.log, file_config.verbose);

    daemonize_init(file_config.daemon_user, file_config.pidfile);

    if (!file_config.no_daemon)
        daemonize_detach();

    daemonize_write_pidfile();
    daemonize_set_user();

#ifndef NDEBUG
    if (!file_config.no_daemon)
#endif
        daemonize_close_stdout_stderr();

    main_loop = g_main_loop_new(NULL, FALSE);

    lmc_connect(file_config.host, file_config.port);
    http_client_init();
    as_init(file_config.scrobblers);

    setup_signals();

    timer = g_timer_new();

    /* set up timeouts */

    save_source_id = g_timeout_add_seconds(file_config.journal_interval,
                                           timer_save_journal, NULL);

    /* run the main loop */

    g_main_loop_run(main_loop);

    /* cleanup */

    g_message("shutting down\n");

    g_source_remove(save_source_id);
    g_main_loop_unref(main_loop);

    g_timer_destroy(timer);

    as_save_cache();
    as_cleanup();
    http_client_finish();
    lmc_disconnect();
    file_cleanup();
    log_deinit();

    daemonize_finish();

    return 0;
}
Example #4
0
int main (int argc, char *argv[])
{
	ASLogger *logger;
	int stdin_handle;
	input_id stdinput;

#ifdef WIN32
	HANDLE hThread;
	int fds[2];
#endif

	/* winsock init */
	tcp_startup ();

	/* setup logging */
	logger = as_logger_create ();
	as_logger_add_output (logger, "stderr");
	as_logger_add_output (logger, "ares.log");

	AS_DBG ("Logging subsystem started");

	/* setup event system */
	as_event_init ();

	/* init lib */
	if (!as_init ())
	{
		printf ("FATA: as_init() failed\n");
		exit (1);
	}

#ifdef WIN32
	/* create console reading thread on windows */
	if (socketpair (0, 0, 0, fds) < 0)
	{
		printf ("FATAL: socketpair() failed\n");
		exit (1);
	}

	stdin_handle = fds[1];
	hThread = (HANDLE) _beginthreadex (NULL, 0, console_input_func,
	                                   (void *)fds[0], 0, NULL);

	if (hThread == (HANDLE) -1 || hThread == (HANDLE) 0)
	{
		printf ("FATAL: couldn't start input thread\n");
		exit (1);
	}
#else
	stdin_handle = 0;
#endif

	/* add callback for command handling */
	stdinput = input_add (stdin_handle, NULL, INPUT_READ, stdin_cb, 0);

#if 0
	/* print prompt */
	printf ("> ");
#endif

	/* run event loop */
	AS_DBG ("Entering event loop");
	as_event_loop ();
	AS_DBG ("Left event loop");

	input_remove (stdinput);

#if WIN32
	/* terminate thread if it is still running and close thread handle */
	TerminateThread (hThread, 0);
	CloseHandle (hThread);
#endif

	/* cleanup  lib */
	as_cleanup ();

	/* shutdown */
	as_event_shutdown ();
	as_logger_free (logger);

	/* winsock shutdown */
	tcp_cleanup ();

	return 0;
}