/*
 * Main entry of system server process.
 * 
 * Calls the standard system initialization function, and then
 * puts the main thread into the thread pool so it can handle
 * incoming transactions.
 * 
 */

#define LOG_TAG "sysproc"

#include <binder/IPCThreadState.h>
#include <utils/Log.h>

#include <private/android_filesystem_config.h>

#include <sys/time.h>
#include <sys/resource.h>

#include <signal.h>
#include <stdio.h>
#include <unistd.h>

using namespace android;

extern "C" status_t system_init();

bool finish_system_init()
{
    return true;
}

static void blockSignals()
{
    sigset_t mask;
    int cc;
    
    sigemptyset(&mask);
    sigaddset(&mask, SIGQUIT);
    sigaddset(&mask, SIGUSR1);
    cc = sigprocmask(SIG_BLOCK, &mask, NULL);
    assert(cc == 0);
}

int main(int argc, const char* const argv[])
{
    LOGI("System server is starting with pid=%d.\n", getpid());

    blockSignals();
    
    // You can trust me, honestly!
    LOGW("*** Current priority: %d\n", getpriority(PRIO_PROCESS, 0));
    setpriority(PRIO_PROCESS, 0, -1);

    #if HAVE_ANDROID_OS
    //setgid(GID_SYSTEM);
    //setuid(UID_SYSTEM);
    #endif

    system_init();    
}
