Lines Matching defs:rp
527 struct pollmgr_refptr *rp;
531 rp = (struct pollmgr_refptr *)malloc(sizeof (*rp));
532 if (rp == NULL) {
536 sys_mutex_new(&rp->lock);
537 rp->ptr = ptr;
538 rp->strong = 1;
539 rp->weak = 0;
541 return rp;
546 pollmgr_refptr_delete(struct pollmgr_refptr *rp)
548 if (rp == NULL) {
552 LWIP_ASSERT1(rp->strong == 0);
553 LWIP_ASSERT1(rp->weak == 0);
555 sys_mutex_free(&rp->lock);
556 free(rp);
561 * Add weak reference before "rp" is sent over a poll manager channel.
564 pollmgr_refptr_weak_ref(struct pollmgr_refptr *rp)
566 sys_mutex_lock(&rp->lock);
568 LWIP_ASSERT1(rp->ptr != NULL);
569 LWIP_ASSERT1(rp->strong > 0);
571 ++rp->weak;
573 sys_mutex_unlock(&rp->lock);
587 pollmgr_refptr_get(struct pollmgr_refptr *rp)
592 sys_mutex_lock(&rp->lock);
594 LWIP_ASSERT1(rp->weak > 0);
595 weak = --rp->weak;
597 handler = rp->ptr;
599 LWIP_ASSERT1(rp->strong == 0);
600 sys_mutex_unlock(&rp->lock);
602 pollmgr_refptr_delete(rp);
607 LWIP_ASSERT1(rp->strong == 1);
612 * ++rp->strong;
627 * Since channel handler would always find rp->strong as it had
633 sys_mutex_unlock(&rp->lock);
637 sys_mutex_unlock(&rp->lock);
649 pollmgr_refptr_unref(struct pollmgr_refptr *rp)
651 sys_mutex_lock(&rp->lock);
653 LWIP_ASSERT1(rp->strong == 1);
654 --rp->strong;
656 if (rp->strong > 0) {
657 sys_mutex_unlock(&rp->lock);
662 /* void *ptr = rp->ptr; */
663 rp->ptr = NULL;
667 weak = rp->weak;
668 sys_mutex_unlock(&rp->lock);
670 pollmgr_refptr_delete(rp);