| mp <= 4095 | 612 | | mp->m_tag = DM_HTCOMMIT;
|
| | 613 | | |
| | 614 | | for (hh = hosts->ht_last; hh > 0; hh--) |
| | 615 | | if (hh != hosts->ht_local && (hp = hosts->ht_hosts[hh])) { |
| | 616 | | mp->m_ref++; |
| | 617 | | mp->m_dst = hp->hd_hostpart | TIDPVMD;
|
| | 618 | | sendmessage(mp); |
| | 619 | | } |
| | 620 | | pmsg_unref(mp); |
| | 621 | | |
| | 622 | | busyadding = 0; |
| | 623 | | sendmessage(wp->wa_mesg); |
| | 624 | | wp->wa_mesg = 0; |
| | 625 | | } |
| | 626 | | break; |
| | 627 | | |
| | 628 | | case WT_SPAWN:
|
| | 629 | | { |
| | 630 | | struct waitc_spawn *wxp; |
| | 631 | | int retry = 0; |
| | 632 | | int v; |
| | 633 | | |
| | 634 | | wxp = (struct waitc_spawn*)wp->wa_spec; |
| | 635 | | |
| | 636 | | |
| | 637 | | |
| | 638 | | |
| | 639 | | for (v = wxp->w_veclen; v-- > 0; ) |
| | 640 | | if (wxp->w_vec[v] == hp->hd_hostpart) |
| | 641 | | if (!(wxp->w_flags |
| | 642 | | & (PvmTaskHost|PvmTaskArch)))
|
| | 643 | | { |
| | 644 | | wxp->w_vec[v] = 0; |
| | 645 | | retry++; |
| | 646 | | } |
| | 647 | | else |
| | 648 | | wxp->w_vec[v] = PvmHostFail;
|
| | 649 | | |
| | 650 | | ht_delete(wxp->w_ht, hp); |
| | 651 | | |
| | 652 | | |
| | 653 | | |
| | 654 | | if ( retry ) |
| | 655 | | assign_tasks(wp); |
| | 656 | | |
| | 657 | | |
| | 658 | | |
| | 659 | | if (wp->wa_peer == wp) |
| | 660 | | assign_tasks(wp); |
| | 661 | | } |
| | 662 | | break; |
| | 663 | | |
| | 664 | | case WT_TASK:
|
| | 665 | | |
| | 666 | | |
| | 667 | | |
| | 668 | | if (wp->wa_peer == wp) { |
| | 669 | | mp = wp->wa_mesg; |
| | 670 | | mp->m_ref++; |
| | 671 | | sendmessage(mp); |
| | 672 | | } |
| | 673 | | break; |
| | 674 | | |
| | 675 | | case WT_HOSTSTART:
|
| | 676 | | |
| | 677 | | |
| | 678 | | |
| | 679 | | busyadding = 0; |
| | 680 | | if (wp->wa_spec) { |
| | 681 | | free_waitc_add((struct waitc_add *)wp->wa_spec); |
| | 682 | | wp->wa_spec = 0; |
| | 683 | | } |
| | 684 | | pkint(wp->wa_mesg, PvmDSysErr);
|
| | 685 | | sendmessage(wp->wa_mesg); |
| | 686 | | wp->wa_mesg = 0; |
| | 687 | | break; |
| | 688 | | |
| | 689 | | case WT_TASKX:
|
| | 690 | | if (wp->wa_tid && wp->wa_mesg) { |
| | 691 | | sendmessage(wp->wa_mesg); |
| | 692 | | wp->wa_mesg = 0; |
| | 693 | | } |
| | 694 | | mb_tidy(wp->wa_on); |
| | 695 | | break; |
| | 696 | | |
| | 697 | | case WT_RESET:
|
| | 698 | | if (wp->wa_tid && wp->wa_mesg) { |
| | 699 | | sendmessage(wp->wa_mesg); |
| | 700 | | wp->wa_mesg = 0; |
| | 701 | | } |
| | 702 | | mb_tidy_reset(wp->wa_on); |
| | 703 | | break; |
| | 704 | | |
| | 705 | | case WT_RECVINFO:
|
| | 706 | | |
| | 707 | | ep = (struct pvmmentry *) wp->wa_spec; |
| | 708 | | if ( ep->me_msg ) |
| | 709 | | PVM_FREE( ep->me_msg );
|
| | 710 | | PVM_FREE( ep );
|
| | 711 | | break; |
| | 712 | | |
| | 713 | | case WT_HOSTF:
|
| | 714 | | sendmessage(wp->wa_mesg); |
| | 715 | | wp->wa_mesg = 0; |
| | 716 | | break; |
| | 717 | | |
| | 718 | | case WT_PSTAT:
|
| | 719 | | case WT_MSTAT:
|
| | 720 | | case WT_HOSTSYNC:
|
| | 721 | | pkint(wp->wa_mesg, PvmHostFail);
|
| | 722 | | sendmessage(wp->wa_mesg); |
| | 723 | | wp->wa_mesg = 0; |
| | 724 | | break; |
| | 725 | | |
| | 726 | | default: |
| | 727 | | pvmlogprintf("hostfailentry() alien wait kind %d\n", |
| | 728 | | wp->wa_kind); |
| | 729 | | break; |
| | 730 | | } |
| | 731 | | |
| | 732 | | wp2 = wp->wa_rlink; |
| | 733 | | wait_delete(wp); |
| | 734 | | wp = wp2; |