• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

C++ siglongjmp函数代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了C++中siglongjmp函数的典型用法代码示例。如果您正苦于以下问题:C++ siglongjmp函数的具体用法?C++ siglongjmp怎么用?C++ siglongjmp使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。



在下文中一共展示了siglongjmp函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: sig_usr1

static void
sig_usr1(int signo)
{
	time_t		starttime;
	if (canjump == 0)
		return;
	/* unexpected signal, ignore */
	pr_mask("starting sig_usr1: ");
	alarm(3);
	/* SIGALRM in 3 seconds */
	starttime = time(NULL);
	for (;;)
		/* busy wait for 5 seconds */
		if (time(NULL) > starttime + 5)
			break;
	pr_mask("finishing sig_usr1: ");
	canjump = 0;
	siglongjmp(jmpbuf, 1);
	/* jump back to main, don't return */
}
开发者ID:wangchuan3533,项目名称:learning,代码行数:20,代码来源:sigmask.c


示例2: sigbus_hdl

static void sigbus_hdl(int sig, siginfo_t *si, void *ptr)
{
	switch (si->si_code) {
	case BUS_MCEERR_AO:
		fprintf(stderr, "%s: BUS_MCEERR_AO addr: %p len: %d\n",
			__func__, si->si_addr, 1 << si->si_addr_lsb);
		sig_mcerr_ao++;
		break;
	case BUS_MCEERR_AR:
		fprintf(stderr, "%s: BUS_MCEERR_AR addr: %p len: %d\n",
			__func__, si->si_addr, 1 << si->si_addr_lsb);
		sig_mcerr_ar++;
		break;
	default:
		sig_count++;
		break;
	}

	siglongjmp(sj_env, 1);
}
开发者ID:pmem,项目名称:ndctl,代码行数:20,代码来源:dax-poison.c


示例3: exception_throw

static void exception_throw(chk_expn_frame *frame,const char *exception,siginfo_t* info) {
	int32_t sig = 0;
	chk_expn_thd *expthd = chk_exp_get_thread_expn();
	if(!frame) {
		expthd->sz = backtrace(expthd->bt, LOG_STACK_SIZE);
		expthd->exception = exception;
		expthd->addr = info->si_addr;
		frame = chk_exp_top();
	}
	if(frame) {
		frame->is_process = 0;
		if(exception == segfault) sig = SIGSEGV;
		else if(exception == sigbug) sig = SIGBUS;
		else if(exception == sigfpe) sig = SIGFPE;  
		siglongjmp(frame->jumpbuffer,sig);
	}else {
		chk_exp_log_exption_stack();
		//没有try,直接终止进程
		exit(0);
	}		
}
开发者ID:Oooocean,项目名称:chuck,代码行数:21,代码来源:exception.c


示例4: ckptRestoreStack

int
ckptRestoreStack(ckptImage * image, size_t size, void *stack_start)
{
    int             dummy;

    if ((void *)&dummy > (void *)((char *)stack_start - size - 2*STACK_GAP))
        ckptRestoreStack(image, size, stack_start);

    /* Here we do some hack, reading directly from file, but there's no
       other way here */
    dummy = image->fd;
    F_REAL_READ(image->fd, (void *)((char *)stack_start - size - STACK_GAP), size);
    F_REAL_CLOSE(dummy);

    ckptSystemIgnore--;

    siglongjmp(ckptJumpBuffer, 1);

    /* XXX: to make compiler happy */
    return 0;
}
开发者ID:smira,项目名称:libcheckpoint,代码行数:21,代码来源:restore.c


示例5: handler

static void
handler(int sig)
{
    /* UNSAFE: This handler uses non-async-signal-safe functions
       (printf(), strsignal(), printSigMask(); see Section 21.1.2) */

    printf("Received signal %d (%s), signal mask is:\n", sig,
            strsignal(sig));
    printSigMask(stdout, NULL);

    if (!canJump) {
        printf("'env' buffer not yet set, doing a simple return\n");
        return;
    }

#ifdef USE_SIGSETJMP
    siglongjmp(senv, 1);
#else
    longjmp(env, 1);
#endif
}
开发者ID:MarkTseng,项目名称:mySampleCode,代码行数:21,代码来源:sigmask_longjmp.c


示例6: coroutine_trampoline

static void coroutine_trampoline(int i0, int i1)
{
    union cc_arg arg;
    CoroutineUContext *self;
    Coroutine *co;

    arg.i[0] = i0;
    arg.i[1] = i1;
    self = arg.p;
    co = &self->base;

    /* Initialize longjmp environment and switch back the caller */
    if (!sigsetjmp(self->env, 0)) {
        siglongjmp(*(sigjmp_buf *)co->entry_arg, 1);
    }

    while (true) {
        co->entry(co->entry_arg);
        qemu_coroutine_switch(co, co->caller, COROUTINE_TERMINATE);
    }
}
开发者ID:lkzhd,项目名称:glusterfs-annotation,代码行数:21,代码来源:coroutine-ucontext.c


示例7: sig_hldr

void sig_hldr(int signal, siginfo_t *si, void *arg)
{
    pthread_t id;
    int i;
    //printf("Caught segfault at address %p  ", si->si_addr);

    id = pthread_self();
    printf("\n thread id = %lu\n",id);
    for (i = 0; i < gloc; i++)
    {
        if (tid[i] == id)
            break;
     }
    if (i >= gloc)
        printf("\nmain thread: caught signal %d\n", signal);
    else
        printf("\nthread no %d: thread id %lu: caught signal %d\n", i+1, id, signal);

    siglongjmp(env, i+1);
    return;
}
开发者ID:spiderfun,项目名称:dotfile,代码行数:21,代码来源:proto_working.c


示例8: sigtstp

/* SIGTSTP handler.  This function care user's ^Z input. */
void
sigtstp (int sig)
{
  /* Execute "end" command. */
  vtysh_execute ("end");
  
  /* Initialize readline. */
  rl_initialize ();
  printf ("\n");

  /* Check jmpflag for duplicate siglongjmp(). */
  if (! jmpflag)
    return;
  /* vtysh_kill_more();*/

  jmpflag = 0;

  /* Back to main command loop. */
  siglongjmp (jmpbuf, 1);
  
}
开发者ID:kkcloudy,项目名称:daemongroup,代码行数:22,代码来源:vtysh_main.c


示例9: fatal_error_handler

static void
fatal_error_handler (j_common_ptr cinfo)
{
    struct error_handler_data *errmgr;
    char buffer[JMSG_LENGTH_MAX];

    errmgr = (struct error_handler_data *) cinfo->err;

    /* Create the message */
    (* cinfo->err->format_message) (cinfo, buffer);

    if ((errmgr->error != NULL) && (*errmgr->error == NULL))
        g_set_error (errmgr->error,
                     JPEG_ERROR,
                     JPEG_ERROR_FAILED,
                     "Error interpreting JPEG image\n\n%s",
                     buffer);

    siglongjmp (errmgr->setjmp_buffer, 1);
    g_assert_not_reached ();
}
开发者ID:novas0x2a,项目名称:gthumb,代码行数:21,代码来源:jpegtran.c


示例10: sig_usr1

static void
sig_usr1(int signo)
{
	time_t starttime;
	
	if (canjump == 0)
		return;    // unexpected signal, ignore 
	
	pr_mask("starting sig_usr1: ");

	alarm(3);
	starttime = time(NULL);
	for (;;)  // busy wait for 5 seconds
		if (time(NULL) > starttime + 5)
			break;

	pr_mask("finishing sig_usr1: ");

	canjump = 0;
	siglongjmp(jmpbuf, 1);
}
开发者ID:xhx1993,项目名称:c-learning,代码行数:21,代码来源:sigjmp.c


示例11: error

VCSI_OBJECT error(VCSI_CONTEXT vc,
		  char* text, 
		  VCSI_OBJECT obj) {
#ifdef DEBUG
  printf("Error: %s - %s\n",text,print_obj(vc,vc->tmpstr,obj,1));
#endif

#ifdef WITH_THREADS
  pthread_mutex_lock(vc->error_mutex);
#endif

  vc->errobj->type = SYMBOL;
  VCELL(vc->errobj) = cons(vc,make_string(vc,text),cons(vc,obj,NULL));
  vc->got_error = 1;

#ifdef WITH_THREADS
  pthread_mutex_unlock(vc->error_mutex);
#endif
   
  siglongjmp(DYNERR(vc->root_wind),1);
  return vc->errobj;
}
开发者ID:mdbarr,项目名称:vcsi,代码行数:22,代码来源:prim.c


示例12: timer

static void timer(int signum)
{
  (void)signum;

  logmsg("alarm!");

  timeout += rexmtval;
  if(timeout >= maxtimeout) {
    if(wrotepidfile) {
      wrotepidfile = 0;
      unlink(pidname);
    }
    if(serverlogslocked) {
      serverlogslocked = 0;
      clear_advisor_read_lock(SERVERLOGS_LOCK);
    }
    exit(1);
  }
#ifdef HAVE_SIGSETJMP
  siglongjmp(timeoutbuf, 1);
#endif
}
开发者ID:1498636925,项目名称:curl,代码行数:22,代码来源:tftpd.c


示例13: catch_signals

void
catch_signals(int signo)
{
    switch(signo)
    {
        case SIGUSR1:
            quitflag++;                             // signal to the timer loop
            break;
            
        case SIGSEGV:
            siglongjmp(env, 1);// jump back to the setjmp() point
            break;
            
        case SIGTERM:
            gFrame->Close();
            break;
            
        default:
            break;
    }
    
}
开发者ID:manuprendlair,项目名称:OpenCPN,代码行数:22,代码来源:OCPNPlatform.cpp


示例14: sage_interrupt_handler

/* Handler for SIGHUP, SIGINT */
void sage_interrupt_handler(int sig)
{
#if ENABLE_DEBUG_INTERRUPT
    if (sage_interrupt_debug_level >= 1) {
        fprintf(stderr, "\n*** SIG %i *** %s sig_on\n", sig, (_signals.sig_on_count > 0) ? "inside" : "outside");
        if (sage_interrupt_debug_level >= 3) print_backtrace();
        fflush(stderr);
        /* Store time of this signal, unless there is already a
         * pending signal. */
        if (!_signals.interrupt_received) gettimeofday(&sigtime, NULL);
    }
#endif

    if (_signals.sig_on_count > 0)
    {
        if (!_signals.block_sigint)
        {
            /* Actually raise an exception so Python can see it */
            sig_raise_exception(sig);

            /* Jump back to sig_on() (the first one if there is a stack) */
            reset_CPU();
            siglongjmp(_signals.env, sig);
        }
    }
    else
    {
        /* Set the Python interrupt indicator, which will cause the
         * Python-level interrupt handler in sage/ext/c_lib.pyx to be
         * called. */
        PyErr_SetInterrupt();
    }

    /* If we are here, we cannot handle the interrupt immediately, so
     * we store the signal number for later use.  But make sure we
     * don't overwrite a SIGHUP or SIGTERM which we already received. */
    if (_signals.interrupt_received != SIGHUP && _signals.interrupt_received != SIGTERM)
        _signals.interrupt_received = sig;
}
开发者ID:chos9,项目名称:sage,代码行数:40,代码来源:interrupt.c


示例15: hilo5

void hilo5(){
sigsetjmp(env_5,1);
if (h5==0) {
}
else{

end_h5=0;
static int  i=0;
static float j=0;
static long double acc=1.0;
 acc_h5=0.0;
while(1){


       int returned_from_longjump=1;
	 
		if ((returned_from_longjump = sigsetjmp(env_5,1)) ==0){
			
	  		siglongjmp(env_sc,1);}
	  		if (end_h5==0){
			for(i=1;i<n_5+1;i++){
				sigsetjmp(env_5,1);
				acc=1.0;
				for (j=2*i;j>i;j--){
					acc*=j/(4*(j-i));
					}
				porcentajehilo5actual = i*57/n_5;
				acc=acc/(2*i+1);
				acc_h5=acc_h5+acc;
				}
			 
			  end_h5=1;
			  
			}
  
	    }
      }
         
  } 
开发者ID:yeinerarias,项目名称:Proyecto_1_RT,代码行数:39,代码来源:test5.c


示例16: rc_raise

extern void rc_raise(ecodes e) {
	if (e == eError && rc_pid != getpid())
		exit(1); /* child processes exit on an error/signal */
	for (; estack != NULL; estack = estack->prev)
		if (estack->e != e) {
			if (e == eBreak && estack->e != eArena && estack->e != eVarstack)
				rc_error("break outside of loop");
			else if (e == eReturn && estack->e == eError) /* can return from loops inside functions */
				rc_error("return outside of function");
			switch (estack->e) {
			default:
				break;
			case eVarstack:
				varrm(estack->data.name, TRUE);
				break;
			case eArena:
				restoreblock(estack->data.b);
				break;
			case eFifo:
				unlink(estack->data.name);
				break;
			case eFd:
				close(estack->data.fd);
				break;
			}
		} else {
			if (e == eError && !estack->interactive) {
				popinput();
			} else {
				Jbwrap *j = estack->data.jb;

				interactive = estack->interactive;
				estack = estack->prev;
				siglongjmp(j->j, 1);
			}
		}
	rc_exit(1); /* top of exception stack */
}
开发者ID:muennich,项目名称:rc3,代码行数:38,代码来源:except.c


示例17: coffeecatch_try_jump_userland

/* Try to jump to userland. */
static void coffeecatch_try_jump_userland(native_code_handler_struct*
                                                 const t,
                                                 const int code,
                                                 siginfo_t *const si,
                                                 void * const sc) {
  (void) si; /* UNUSED */
  (void) sc; /* UNUSED */

  /* Valid context ? */
  if (t != NULL && t->ctx_is_set) {
    DEBUG(print("calling siglongjmp()\n"));

    /* Invalidate the context */
    t->ctx_is_set = 0;

    /* We need to revert the alternate stack before jumping. */
    coffeecatch_revert_alternate_stack();

    /*
     * Note on async-signal-safety of siglongjmp() [POSIX] :
     * "Note that longjmp() and siglongjmp() are not in the list of
     * async-signal-safe functions. This is because the code executing after
     * longjmp() and siglongjmp() can call any unsafe functions with the same
     * danger as calling those unsafe functions directly from the signal
     * handler. Applications that use longjmp() and siglongjmp() from within
     * signal handlers require rigorous protection in order to be portable.
     * Many of the other functions that are excluded from the list are
     * traditionally implemented using either malloc() or free() functions or
     * the standard I/O library, both of which traditionally use data
     * structures in a non-async-signal-safe manner. Since any combination of
     * different functions using a common data structure can cause
     * async-signal-safety problems, this volume of POSIX.1-2008 does not
     * define the behavior when any unsafe function is called in a signal
     * handler that interrupts an unsafe function."
     */
    siglongjmp(t->ctx, code);
  }
}
开发者ID:gmetal,项目名称:coffeecatch,代码行数:39,代码来源:coffeecatch.c


示例18: sig_usr1

static void sig_usr1(int signo)
{
    time_t starttime;

    if (0 == canjump) {
        return ;
    }
    pr_mask("starting sig_usr1:");
    alarm(3);
    starttime = time(NULL);
    /* 时间太长了!
    for (; ;) {
        if (time(NULL) > starttime + 5) {
            break;
        }
    }
    */

    pr_mask("finishing sig_usr1:");

    canjump = 0;
    siglongjmp(jmpbuf,1);
}
开发者ID:whj2819,项目名称:Hello-World,代码行数:23,代码来源:demo14.c


示例19: int_handler

void int_handler(int signo) {
	if (signo == SIGPIPE) {
		siglongjmp(int_jb, 1);
	}
	if (signo == SIGINT) {
		// I need to kill less so less can wipe the screen
		if (!kill(less_pid, SIGTERM))
			waitpid(less_pid, NULL, 0);
		else
			fprintf(stderr, "Error while killing less: %s\n", strerror(errno));
		// Less disables echo so I need to re-enable it
		struct termios tp;
		if (!tcgetattr(STDIN_FILENO, &tp)) {
			tp.c_lflag |= ECHO;
			if (tcsetattr(STDIN_FILENO, TCSAFLUSH, &tp) < 0)
				fprintf(stderr, "Error while setting terminal attributes: %s\n", strerror(errno));
		} else {
			fprintf(stderr, "Error while getting terminal attributes: %s\n", strerror(errno));
		}
		fprintf(stderr, "\nFiles Processed: %d, Bytes Processed: %d!\n", dwFilesProcessed, dwBytesProcessed);
		exit(1);
	}
}
开发者ID:xthunder94,项目名称:ece-357,代码行数:23,代码来源:assignment4.c


示例20: VarNames

static Term VarNames(VarEntry *p, Term l USES_REGS) {
  if (p != NULL) {
    if (strcmp(p->VarRep, "_") != 0) {
      Term t[2];
      Term o;

      t[0] = MkAtomTerm(Yap_LookupAtom(p->VarRep));
      t[1] = p->VarAdr;
      o = Yap_MkApplTerm(FunctorEq, 2, t);
      o = MkPairTerm(o, VarNames(p->VarRight,
                                 VarNames(p->VarLeft, l PASS_REGS) PASS_REGS));
      if (HR > ASP - 4096) {
        save_machine_regs();
        siglongjmp(LOCAL_IOBotch, 1);
      }
      return (o);
    } else {
      return VarNames(p->VarRight, VarNames(p->VarLeft, l PASS_REGS) PASS_REGS);
    }
  } else {
    return (l);
  }
}
开发者ID:jfmc,项目名称:yap-6.3,代码行数:23,代码来源:parser.c



注:本文中的siglongjmp函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C++ sigma函数代码示例发布时间:2022-05-30
下一篇:
C++ sigismember函数代码示例发布时间:2022-05-30
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap