19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Main entry of system server process.
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Calls the standard system initialization function, and then
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * puts the main thread into the thread pool so it can handle
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * incoming transactions.
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define LOG_TAG "sysproc"
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
120795272aa226f4e965968a03daddc53ce30b7cdaMathias Agopian#include <binder/IPCThreadState.h>
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Log.h>
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <private/android_filesystem_config.h>
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/time.h>
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <sys/resource.h>
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <signal.h>
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <unistd.h>
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectusing namespace android;
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern "C" status_t system_init();
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectbool finish_system_init()
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return true;
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void blockSignals()
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sigset_t mask;
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    int cc;
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sigemptyset(&mask);
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sigaddset(&mask, SIGQUIT);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sigaddset(&mask, SIGUSR1);
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    cc = sigprocmask(SIG_BLOCK, &mask, NULL);
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    assert(cc == 0);
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint main(int argc, const char* const argv[])
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LOGI("System server is starting with pid=%d.\n", getpid());
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    blockSignals();
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    // You can trust me, honestly!
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    LOGW("*** Current priority: %d\n", getpriority(PRIO_PROCESS, 0));
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    setpriority(PRIO_PROCESS, 0, -1);
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    #if HAVE_ANDROID_OS
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //setgid(GID_SYSTEM);
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    //setuid(UID_SYSTEM);
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    #endif
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    system_init();
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
62