Home | History | Annotate | Download | only in librumpclient

Lines Matching refs:spc

137 send_with_recon(struct spclient *spc, struct iovec *iov, size_t iovlen)
145 rv = dosend(spc, iov, iovlen);
220 cliwaitresp(struct spclient *spc, struct respwait *rw, sigset_t *mask,
226 pthread_mutex_lock(&spc->spc_mtx);
228 sendunlockl(spc);
229 mygen = spc->spc_generation;
233 if (__predict_false(spc->spc_generation != mygen || !imalive))
237 if (spc->spc_istatus == SPCSTATUS_FREE) {
240 spc->spc_istatus = SPCSTATUS_BUSY;
241 pthread_mutex_unlock(&spc->spc_mtx);
298 switch (readframe(spc)) {
309 switch (spc->spc_hdr.rsp_class) {
312 kickwaiter(spc);
313 gotresp = spc->spc_hdr.rsp_reqno ==
317 handlereq(spc);
326 pthread_mutex_lock(&spc->spc_mtx);
327 if (spc->spc_istatus == SPCSTATUS_WANTED)
328 kickall(spc);
329 spc->spc_istatus = SPCSTATUS_FREE;
333 pthread_mutex_unlock(&spc->spc_mtx);
336 pthread_mutex_lock(&spc->spc_mtx);
339 spc->spc_istatus = SPCSTATUS_WANTED;
340 pthread_cond_wait(&rw->rw_cv, &spc->spc_mtx);
343 TAILQ_REMOVE(&spc->spc_respwait, rw, rw_entries);
344 pthread_mutex_unlock(&spc->spc_mtx);
347 if (spc->spc_generation != mygen || !imalive) {
354 syscall_req(struct spclient *spc, sigset_t *omask, int sysnum,
371 putwait(spc, &rw, &rhdr);
372 if ((rv = send_with_recon(spc, iov, __arraycount(iov))) != 0) {
373 unputwait(spc, &rw);
377 rv = cliwaitresp(spc, &rw, omask, false);
387 handshake_req(struct spclient *spc, int type, void *data,
439 putwait_locked(spc, &rw, &rhdr);
441 putwait(spc, &rw, &rhdr);
449 rv = send_with_recon(spc, iov, __arraycount(iov));
452 unputwait_locked(spc, &rw);
454 unputwait(spc, &rw);
459 rv = cliwaitresp(spc, &rw, &omask, haslock);
473 prefork_req(struct spclient *spc, sigset_t *omask, void **resp)
488 putwait(spc, &rw, &rhdr);
489 rv = send_with_recon(spc, iov, __arraycount(iov));
491 unputwait(spc, &rw);
495 rv = cliwaitresp(spc, &rw, omask, false);
508 resp_sendlock(struct spclient *spc)
512 pthread_mutex_lock(&spc->spc_mtx);
513 while (spc->spc_ostatus != SPCSTATUS_FREE) {
514 if (__predict_false(spc->spc_reconnecting)) {
518 spc->spc_ostatus = SPCSTATUS_WANTED;
519 pthread_cond_wait(&spc->spc_cv, &spc->spc_mtx);
521 spc->spc_ostatus = SPCSTATUS_BUSY;
524 pthread_mutex_unlock(&spc->spc_mtx);
529 send_copyin_resp(struct spclient *spc, uint64_t reqno, void *data, size_t dlen,
547 if (resp_sendlock(spc) != 0)
549 (void)SENDIOV(spc, iov);
550 sendunlock(spc);
554 send_anonmmap_resp(struct spclient *spc, uint64_t reqno, void *addr)
568 if (resp_sendlock(spc) != 0)
570 (void)SENDIOV(spc, iov);
571 sendunlock(spc);
607 handlereq(struct spclient *spc)
610 struct rsp_hdr *rhdr = &spc->spc_hdr;
613 int reqtype = spc->spc_hdr.rsp_type;
620 copydata = (struct rsp_copydata *)spc->spc_buf;
623 send_copyin_resp(spc, spc->spc_hdr.rsp_reqno,
630 copydata = (struct rsp_copydata *)spc->spc_buf;
639 maplen = *(size_t *)spc->spc_buf;
645 send_anonmmap_resp(spc, spc->spc_hdr.rsp_reqno, mapaddr);
662 spcfreebuf(spc);