int
smfi_main (void)
{
    gboolean success;
    GError *error = NULL;

    libmilter_compatible_initialize();

    if (client)
        g_object_unref(client);
    client = milter_client_new();
    setup_milter_client(client);
    success = milter_client_run(client, &error);
    if (!success) {
        milter_error("failed to run main loop: %s", error->message);
        g_error_free(error);
    }
    g_object_unref(client);
    client = NULL;

    libmilter_compatible_reset();

    milter_quit();

    if (success)
        return MI_SUCCESS;
    else
        return MI_FAILURE;
}
void
milter_manager_quit (void)
{
    if (!initialized)
        return;

    if (the_manager) {
        g_object_unref(the_manager);
        the_manager = NULL;
    }

    _milter_manager_configuration_quit();

    g_log_remove_handler("milter-manager", milter_manager_log_handler_id);
    milter_server_quit();
    milter_client_quit();
    milter_quit();
}