ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/libev/ev.c
(Generate patch)

Comparing libev/ev.c (file contents):
Revision 1.178 by root, Tue Dec 11 18:36:11 2007 UTC vs.
Revision 1.180 by root, Tue Dec 11 22:04:55 2007 UTC

476 pendings [pri][w_->pending - 1].w = w_; 476 pendings [pri][w_->pending - 1].w = w_;
477 pendings [pri][w_->pending - 1].events = revents; 477 pendings [pri][w_->pending - 1].events = revents;
478 } 478 }
479} 479}
480 480
481void inline_size 481void inline_speed
482queue_events (EV_P_ W *events, int eventcnt, int type) 482queue_events (EV_P_ W *events, int eventcnt, int type)
483{ 483{
484 int i; 484 int i;
485 485
486 for (i = 0; i < eventcnt; ++i) 486 for (i = 0; i < eventcnt; ++i)
638void inline_speed 638void inline_speed
639upheap (WT *heap, int k) 639upheap (WT *heap, int k)
640{ 640{
641 WT w = heap [k]; 641 WT w = heap [k];
642 642
643 while (k && heap [k >> 1]->at > w->at) 643 while (k)
644 { 644 {
645 int p = (k - 1) >> 1;
646
647 if (heap [p]->at <= w->at)
648 break;
649
645 heap [k] = heap [k >> 1]; 650 heap [k] = heap [p];
646 ((W)heap [k])->active = k + 1; 651 ((W)heap [k])->active = k + 1;
647 k >>= 1; 652 k = p;
648 } 653 }
649 654
650 heap [k] = w; 655 heap [k] = w;
651 ((W)heap [k])->active = k + 1; 656 ((W)heap [k])->active = k + 1;
652 657
655void inline_speed 660void inline_speed
656downheap (WT *heap, int N, int k) 661downheap (WT *heap, int N, int k)
657{ 662{
658 WT w = heap [k]; 663 WT w = heap [k];
659 664
660 while (k < (N >> 1)) 665 for (;;)
661 { 666 {
662 int j = k << 1; 667 int c = (k << 1) + 1;
663 668
664 if (j + 1 < N && heap [j]->at > heap [j + 1]->at) 669 if (c >= N)
665 ++j;
666
667 if (w->at <= heap [j]->at)
668 break; 670 break;
669 671
672 c += c + 1 < N && heap [c]->at > heap [c + 1]->at
673 ? 1 : 0;
674
675 if (w->at <= heap [c]->at)
676 break;
677
670 heap [k] = heap [j]; 678 heap [k] = heap [c];
671 ((W)heap [k])->active = k + 1; 679 ((W)heap [k])->active = k + 1;
680
672 k = j; 681 k = c;
673 } 682 }
674 683
675 heap [k] = w; 684 heap [k] = w;
676 ((W)heap [k])->active = k + 1; 685 ((W)heap [k])->active = k + 1;
677} 686}
1743 if (expect_false (ev_is_active (w))) 1752 if (expect_false (ev_is_active (w)))
1744 return; 1753 return;
1745 1754
1746 assert (("ev_signal_start called with illegal signal number", w->signum > 0)); 1755 assert (("ev_signal_start called with illegal signal number", w->signum > 0));
1747 1756
1757 {
1758#ifndef _WIN32
1759 sigset_t full, prev;
1760 sigfillset (&full);
1761 sigprocmask (SIG_SETMASK, &full, &prev);
1762#endif
1763
1764 array_needsize (ANSIG, signals, signalmax, w->signum, signals_init);
1765
1766#ifndef _WIN32
1767 sigprocmask (SIG_SETMASK, &prev, 0);
1768#endif
1769 }
1770
1748 ev_start (EV_A_ (W)w, 1); 1771 ev_start (EV_A_ (W)w, 1);
1749 array_needsize (ANSIG, signals, signalmax, w->signum, signals_init);
1750 wlist_add ((WL *)&signals [w->signum - 1].head, (WL)w); 1772 wlist_add ((WL *)&signals [w->signum - 1].head, (WL)w);
1751 1773
1752 if (!((WL)w)->next) 1774 if (!((WL)w)->next)
1753 { 1775 {
1754#if _WIN32 1776#if _WIN32

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines