- error_handler = &jmpbuf;
- if (api_timeout > 0) {
- timerset = 1; /* TODO: check statuses */
- sevp.sigev_notify = SIGEV_THREAD_ID;
- sevp.sigev_signo = SIGALRM;
- sevp.sigev_value.sival_ptr = NULL;
-#if defined(sigev_notify_thread_id)
- sevp.sigev_notify_thread_id = (pid_t)syscall(SYS_gettid);
-#else
- sevp._sigev_un._tid = (pid_t)syscall(SYS_gettid);
-#endif
- timer_create(CLOCK_THREAD_CPUTIME_ID, &sevp, &timerid);
- its.it_interval.tv_sec = 0;
- its.it_interval.tv_nsec = 0;
- its.it_value.tv_sec = api_timeout;
- its.it_value.tv_nsec = 0;
- timer_settime(timerid, 0, &its, NULL);
- }
-
- cb(req);
- }
- if (timerset)
- timer_delete(timerid);
- error_handler = older;
-}
-
-static void call_check(struct afb_req req, struct afb_context *context, const struct AFB_restapi *verb)
-{
- int stag = (int)(verb->session & AFB_SESSION_MASK);
-
- if (stag != AFB_SESSION_NONE) {
- if (!afb_context_check(context)) {
- afb_context_close(context);
- afb_req_fail(req, "failed", "invalid token's identity");
- return;
- }
- }
-
- if ((stag & AFB_SESSION_CREATE) != 0) {
- if (!afb_context_create(context)) {
- afb_context_close(context);
- afb_req_fail(req, "failed", "invalid creation state");
- return;
- }