亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? signal.cxx

?? ecos實時嵌入式操作系統
?? CXX
?? 第 1 頁 / 共 3 頁
字號:
                // This is a standard signal delivery.                CYG_CHECK_FUNC_PTR( ss->sa.sa_handler,                                    "Bad sa_handler signal handler" );                ss->sa.sa_handler( signo );            }            // Relock the mutex             signal_mutex.lock();                            // Restore original signal mask            self->sigmask = oldmask;            // return that we have handled a signal            res = true;        }    }    if( !locked ) signal_mutex.unlock();        return res;}// -------------------------------------------------------------------------// Utility routine to signal any threads waiting in sigwait*().void cyg_posix_signal_sigwait(){    signal_sigwait.broadcast();}       // -------------------------------------------------------------------------// Action routine called from kernel alarm to deliver the SIGALRM signal.// We cannot call any signal delivery functions directly here, so we simply// set a flag and schedule an ASR to be called.static void sigalrm_action( Cyg_Alarm *alarm, CYG_ADDRWORD data ){    sigset_t mask;    sigalrm_armed = false;    sigalrm_pending = true;    sigemptyset( &mask );    sigaddset( &mask, SIGALRM );    // Wake up any threads in sigsuspend() and sigwait() in case they    // are waiting for an alarm, and would have SIGALRM masked    signal_sigwait.broadcast();        cyg_posix_pthread_release_thread( &mask );}// -------------------------------------------------------------------------// Check for SIGALRMs. This is called from the ASR and sigtimedwait()// as alarms need to be handled as a special case.static __inline__ void check_sigalarm(void){    // If there is a pending SIGALRM, generate it    if( sigalrm_pending )    {        sigalrm_pending = false;                struct sigevent sev;        sev.sigev_notify           = SIGEV_SIGNAL;        sev.sigev_signo            = SIGALRM;        sev.sigev_value.sival_int  = 0;        // generate the signal        cyg_sigqueue( &sev, SI_USER );    }}// -------------------------------------------------------------------------// signal ASR function. This is called from the general POSIX ASR to// deal with any signal related issues.externC void cyg_posix_signal_asr(pthread_info *self){    check_sigalarm();    // Now call cyg_deliver_signals() to see if we can    // handle any signals now.        cyg_deliver_signals();}//==========================================================================// Per-thread initialization and destructionexternC void cyg_posix_thread_siginit( pthread_info *thread,                                       pthread_info *parentthread ){    // Clear out signal masks    sigemptyset( &thread->sigpending );    // but threads inherit signal masks    if ( NULL == parentthread )        sigemptyset( &thread->sigmask );    else        thread->sigmask = parentthread->sigmask;        cyg_pthread_exception_init( thread );}externC void cyg_posix_thread_sigdestroy( pthread_info *thread ){    cyg_pthread_exception_destroy( thread );}//==========================================================================// Functions to generate signals// -------------------------------------------------------------------------// Deliver sig to a process.// eCos only supports the value 0 for pid.externC int kill (pid_t pid, int sig){    SIGNAL_ENTRY();    if( !SIGNAL_VALID(sig) )        SIGNAL_RETURN(EINVAL);        if( pid != 0 )        SIGNAL_RETURN(ESRCH);    struct sigevent sev;    sev.sigev_notify           = SIGEV_SIGNAL;    sev.sigev_signo            = sig;    sev.sigev_value.sival_int  = 0;        cyg_sigqueue( &sev, SI_USER );    cyg_deliver_signals();        SIGNAL_RETURN(0);}// -------------------------------------------------------------------------externC int pthread_kill (pthread_t threadid, int sig){    SIGNAL_ENTRY();    if( !SIGNAL_VALID(sig) )        SIGNAL_RETURN(EINVAL);        struct sigevent sev;    pthread_info *thread = pthread_info_id(threadid);    if( thread == NULL )        SIGNAL_RETURN(ESRCH);        sev.sigev_notify           = SIGEV_SIGNAL;    sev.sigev_signo            = sig;    sev.sigev_value.sival_int  = 0;        cyg_sigqueue( &sev, SI_USER, thread );    cyg_deliver_signals();        SIGNAL_RETURN(0);}//==========================================================================// Functions to catch signals// -------------------------------------------------------------------------// Install signal handler for sig.externC int sigaction  (int sig, const struct sigaction *act,                        struct sigaction *oact){    SIGNAL_ENTRY();    if( !SIGNAL_VALID(sig) )        SIGNAL_RETURN(EINVAL);        signal_state *ss = &sigstate[sig];        signal_mutex.lock();    if( oact != NULL )        *oact = ss->sa;    ss->sa = *act;    if( ss->sa.sa_handler == SIG_IGN )    {        // Setting the handler to SIG_IGN causes any pending        // signals to be discarded and any queued values to also        // be removed.        pthread_info *self = pthread_self_info();        sigset_t sigbit = 1<<sig;        if( (sig_pending | self->sigpending) & sigbit )        {            // This signal is pending, clear it            sig_pending &= ~sigbit;            self->sigpending &= ~sigbit;            // Clean out any queued signal_info objects            while( ss->pending != NULL )            {                signal_info *si = ss->pending->next;                                // Remove the head signal_info object from the                // circular list.                 if( ss->pending == si )                    ss->pending = NULL;                else                    ss->pending->next = si->next;                // Return it to the free list                si->next = siginfo_next;                siginfo_next = si;            }        }    }        cyg_deliver_signals();        signal_mutex.unlock();        SIGNAL_RETURN(0);}    // -------------------------------------------------------------------------// Queue signal to process with value.externC int sigqueue (pid_t pid, int sig, const union sigval value){    SIGNAL_ENTRY();    if( !SIGNAL_VALID(sig) )        SIGNAL_RETURN(EINVAL);        struct sigevent sev;    sev.sigev_notify   = SIGEV_SIGNAL;    sev.sigev_signo    = sig;    sev.sigev_value    = value;        cyg_sigqueue( &sev, SI_QUEUE );    cyg_deliver_signals();        SIGNAL_RETURN(0);}    //==========================================================================// Functions to deal with current blocked and pending masks// -------------------------------------------------------------------------// Set process blocked signal mask// Map this onto pthread_sigmask().externC int sigprocmask  (int how, const sigset_t *set, sigset_t *oset){    return pthread_sigmask( how, set, oset);}    // -------------------------------------------------------------------------// Set calling thread's blocked signal maskexternC int pthread_sigmask (int how, const sigset_t *set, sigset_t *oset){    int err = 0;        SIGNAL_ENTRY();    pthread_info *self = pthread_self_info();    // Save old set    if( oset != NULL )        *oset = self->sigmask;    if( set != NULL )    {        switch( how )        {        case SIG_BLOCK:            self->sigmask |= *set;            break;                case SIG_UNBLOCK:            self->sigmask &= ~*set;            break;                    case SIG_SETMASK:            self->sigmask = *set;            break;        default:            err = EINVAL;            break;        }    }    // Deliver any newly unblocked signals    cyg_deliver_signals();        SIGNAL_RETURN(err);}// -------------------------------------------------------------------------// Exported routine to set calling thread's blocked signal mask//// Optionally set and return the current thread's signal mask. This is// exported to other packages so that they can manipulate the signal// mask without necessarily having them delivered (as calling// pthread_sigmask() would). Signals can be delivered by calling// cyg_posix_deliver_signals().externC void cyg_pthread_sigmask_set (const sigset_t *set, sigset_t *oset){    pthread_info *self = pthread_self_info();    if( self != NULL )    {        if( oset != NULL )            *oset = self->sigmask;        if( set != NULL )            self->sigmask = *set;    }}// -------------------------------------------------------------------------// Exported routine to test for any pending signals.//// This routine tests for any pending undelivered, unmasked// signals. If there are any it returns true.  This is exported to// other packages, such as FILEIO, so that they can detect whether to// abort a current API call with an EINTR result.externC cyg_bool cyg_posix_sigpending(void){    pthread_info *self = pthread_self_info();    if( self == NULL )        return false;        return ( ((sig_pending | self->sigpending) & ~self->sigmask) != 0 );}// -------------------------------------------------------------------------// Exported routine to deliver selected signals//// This routine optionally sets the given mask and then tries to// deliver any pending signals that have been unmasked. This is// exported to other packages so that they can cause signals to be// delivered at controlled points during execution.externC void cyg_posix_deliver_signals( const sigset_t *mask ){    sigset_t oldmask;    pthread_info *self = pthread_self_info();    if( self != NULL )    {        if( mask != NULL )        {            oldmask = self->sigmask;            self->sigmask = *mask;        }        else            oldmask = 0;   // silence warning        cyg_deliver_signals();        if( mask != NULL )                    self->sigmask = oldmask;    }}// -------------------------------------------------------------------------// Get set of pending signals for this processexternC int sigpending  (sigset_t *set){    SIGNAL_ENTRY();    if( set == NULL )        SIGNAL_RETURN(EINVAL);        pthread_info *self = pthread_self_info();        *set = self->sigpending | sig_pending;        SIGNAL_RETURN(0);}    //==========================================================================// Wait for or accept signals// -------------------------------------------------------------------------// Block signals in set and wait for a signalexternC int sigsuspend  (const sigset_t *set){    SIGNAL_ENTRY();    pthread_info *self = pthread_self_info();    signal_mutex.lock();    // Save the old mask and set the current mask to

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国内欧美视频一区二区| 精品av久久707| 欧美婷婷六月丁香综合色| 色综合久久综合| 中文字幕不卡在线播放| 国产精品久久网站| 中文字幕在线视频一区| 亚洲精品高清视频在线观看| 一区二区不卡在线播放| 婷婷久久综合九色综合绿巨人| 亚洲成人综合网站| 视频一区视频二区在线观看| 久久精品国产亚洲一区二区三区 | 青青草伊人久久| 久久精品国产网站| 国产精品456露脸| 国产mv日韩mv欧美| 91香蕉视频污| 欧美日韩一区二区三区高清| 欧美一级久久久| 国产日韩精品一区二区浪潮av | 免费观看在线综合色| 精品无人区卡一卡二卡三乱码免费卡| 国产在线视视频有精品| thepron国产精品| 欧美性受xxxx黑人xyx| 欧美一三区三区四区免费在线看| 日韩丝袜情趣美女图片| 国产婷婷色一区二区三区四区| 亚洲欧美一区二区在线观看| 午夜欧美2019年伦理| 久久国产精品99久久人人澡| 成人精品视频网站| 欧美精品乱码久久久久久按摩 | 成人免费在线播放视频| 亚洲影视在线播放| 美女视频黄频大全不卡视频在线播放| 懂色av一区二区三区免费观看| 91久久一区二区| 精品国产网站在线观看| 中文字幕亚洲电影| 日本一道高清亚洲日美韩| 国产乱码字幕精品高清av| 91免费视频观看| 日韩欧美一区二区不卡| 亚洲欧美日韩中文字幕一区二区三区 | 自拍偷拍亚洲综合| 日韩成人av影视| av午夜精品一区二区三区| 3d成人动漫网站| 国产精品毛片久久久久久久| 日韩av电影一区| av一区二区三区四区| 欧美一区二区三区在线视频| 国产成人免费视频网站高清观看视频 | 日本女人一区二区三区| 99久久99久久免费精品蜜臀| 欧美一区二区精美| 亚洲精品视频观看| 国产精品亚洲一区二区三区妖精| 欧美在线综合视频| 欧美激情综合五月色丁香| 五月婷婷欧美视频| 99v久久综合狠狠综合久久| 精品少妇一区二区| 午夜天堂影视香蕉久久| www.亚洲国产| 久久欧美一区二区| 美日韩黄色大片| 欧美怡红院视频| 日韩一区在线免费观看| 国产精品一区二区无线| 欧美一区二区视频免费观看| 一区二区三区中文字幕电影| 成人免费视频视频| 亚洲精品一区二区三区四区高清 | eeuss影院一区二区三区| 久久综合九色综合欧美98 | 91国内精品野花午夜精品 | 另类小说综合欧美亚洲| 欧美精品日韩一区| 亚洲一二三区在线观看| 一本大道久久a久久综合婷婷| 久久久久久久久久久电影| 青草av.久久免费一区| 欧美在线一二三| 亚洲美女偷拍久久| av在线免费不卡| 国产精品精品国产色婷婷| 国产成人免费网站| 久久精品视频一区| 国产成人免费视频网站| 久久午夜老司机| 国产精品综合一区二区| 2019国产精品| 国产一区二区三区国产| 久久综合资源网| 国产一区在线视频| 国产人久久人人人人爽| 国产宾馆实践打屁股91| 国产欧美一区二区精品仙草咪| 国产制服丝袜一区| 国产欧美综合在线| 国产91精品久久久久久久网曝门| 国产日产精品1区| 成人精品视频网站| 亚洲三级小视频| 在线观看视频一区二区欧美日韩| 一区二区视频在线看| 色94色欧美sute亚洲线路二| 一区二区三区精品久久久| 91黄色小视频| 手机精品视频在线观看| 日韩综合小视频| 日韩欧美aaaaaa| 国产精品1024| 亚洲天堂久久久久久久| 欧美性xxxxx极品少妇| 日本亚洲三级在线| 欧美精品一区二区三区蜜桃| 国产成人av影院| 亚洲精品国产成人久久av盗摄 | 国产精品久久夜| 色婷婷综合久久久久中文一区二区| 亚洲激情av在线| 欧美精品 日韩| 国产精品一卡二卡在线观看| 国产精品久久久久一区| 欧美亚洲免费在线一区| 麻豆久久一区二区| 国产精品日韩成人| 欧美在线一区二区三区| 精品在线观看视频| 国产精品美女久久久久久久| 在线观看日韩毛片| 久久9热精品视频| 综合久久给合久久狠狠狠97色 | 亚洲天堂中文字幕| 欧美老肥妇做.爰bbww| 国产精品一二三四| 一区二区三区在线播| 日韩免费一区二区三区在线播放| 国产成人综合网| 香蕉影视欧美成人| 久久精品人人做人人综合| 欧美在线一二三四区| 国产一区二区在线看| 亚洲人成在线观看一区二区| 在线综合+亚洲+欧美中文字幕| 成人性生交大片免费看视频在线| 亚洲高清一区二区三区| 国产亚洲自拍一区| 欧美日韩在线精品一区二区三区激情| 国模一区二区三区白浆| 亚洲午夜精品在线| 久久九九久久九九| 制服丝袜国产精品| 99久久免费视频.com| 精品一区二区三区免费视频| 一区二区久久久久久| 国产日产精品一区| 欧美一区二区三区视频在线| 色综合色综合色综合色综合色综合| 极品少妇xxxx精品少妇| 亚洲成人手机在线| 亚洲视频一二三区| 久久久久久**毛片大全| 51精品久久久久久久蜜臀| 91女神在线视频| 丰满少妇在线播放bd日韩电影| 日本va欧美va瓶| 一区二区高清视频在线观看| 国产精品欧美经典| 久久综合久久综合久久综合| 制服丝袜一区二区三区| 在线看国产日韩| 99久久久国产精品| 国产精品2024| 九色porny丨国产精品| 婷婷久久综合九色综合伊人色| 亚洲精品欧美综合四区| 国产精品乱人伦| 国产清纯在线一区二区www| 精品日韩一区二区三区免费视频| 精品视频色一区| 欧美性色欧美a在线播放| 国产精品拍天天在线| 337p日本欧洲亚洲大胆精品 | 亚洲欧洲99久久| 国产精品美女久久久久久久| 国产视频在线观看一区二区三区 | 亚洲综合激情网| 亚洲另类一区二区| 亚洲人123区| 亚洲猫色日本管| 亚洲欧美偷拍卡通变态| 亚洲日本电影在线| 亚洲品质自拍视频网站| 亚洲视频一二三区| 伊人开心综合网|