| true | 3526 | | pvm_start_pvmd(argc, argv, block) | | | 3527 | | int argc; | | | 3528 | | char **argv; | | | 3529 | | int block; | | | 3530 | | { | | | 3531 | | char *sfn; | | | 3532 | | struct stat sb; | | | 3533 | | int cc; | | | 3534 | | char *fn; | | | 3535 | | char **av; | | | 3536 | | int pfd[2]; | | | | | ... | | | 3541 | | #ifdef WIN32 | | | 3542 | | char *pathending = "\\lib\\win32\\pvmd3.exe"; | | | 3543 | | SECURITY_ATTRIBUTES saPipe; | | | 3544 | | PROCESS_INFORMATION pi; | | | 3545 | | STARTUPINFO si; | | | 3546 | | HANDLE pvmdid; | | | 3547 | | int i = 0; | | | 3548 | | char cmd[256]; | | | 3549 | | #endif | | | 3550 | | | | | 3551 | | TEV_DECLS;
| | | 3552 | | | | | 3553 | | if (TEV_EXCLUSIVE) {
| | | 3554 | | if (pvmmytid != -1 | | | 3555 | | && TEV_DO_TRACE(TEV_START_PVMD,TEV_EVENT_ENTRY)) {
| | | 3556 | | TEV_PACK_INT( TEV_DID_BF, TEV_DATA_SCALAR, &block, 1, 1 );
| | | 3557 | | TEV_PACK_STRING( TEV_DID_AS, TEV_DATA_ARRAY,
| | | 3558 | | argv, argc, 1 ); | | | 3559 | | TEV_FIN;
| | | 3560 | | } | | | 3561 | | } | | | 3562 | | | | | 3563 | | if (argc < 0 || !argv) | | | 3564 | | argc = 0; | | | 3565 | | | | | 3566 | | #ifndef WIN32 | | | 3567 | | if ((pvm_useruid = getuid()) == -1) { | | | 3568 | | pvmlogerror("can't getuid()\n"); | | | 3569 | | cc = PvmSysErr;
| | | 3570 | | goto bail; | | | 3571 | | } | | | 3572 | | pvmchkuid( pvm_useruid ); | | | 3573 | | #else | | | 3574 | | if (!username) | | | 3575 | | username = MyGetUserName(); | | | 3576 | | #endif | | | 3577 | | | | | 3578 | | if (!(sfn = pvmdsockfile())) { | | | 3579 | | pvmlogerror("pvm_start_pvmd() pvmdsockfile() failed\n"); | | | 3580 | | cc = PvmSysErr;
| | | 3581 | | goto bail; | | | 3582 | | } | | | 3583 | | | | | 3584 | | if (stat(sfn, &sb) != -1) { | | | 3585 | | cc = PvmDupHost;
| | | 3586 | | goto bail; | | | 3587 | | } | | | 3588 | | | | | 3589 | | #ifdef WIN32 | | | 3590 | | | | | 3591 | | cc = PvmSysErr; | | | 3592 | | | | | 3593 | | fn = malloc(128 * sizeof(char)); | | | 3594 | | | | | | | ... | | | 3650 | | PVM_FREE(av); | | | 3651 | | | | | 3652 | | while (stat(sfn, &sb) == -1) | | | 3653 | | Sleep(5000); | | | 3654 | | | | | 3655 | | #else | | | 3656 | | | | | 3657 | | #ifdef IMA_TITN | | | 3658 | | if (socketpair(AF_UNIX, SOCK_STREAM, 0, pfd) == -1) | | | 3659 | | #else | | | 3660 | | if (pipe(pfd) == -1) | | | 3661 | | #endif | | | 3662 | | { | | | 3663 | | cc = PvmSysErr;
| | | 3664 | | goto bail; | | | 3665 | | } | | | 3666 | | | | | 3667 | | fn = pvmgetpvmd(); | | | 3668 | | | | | 3669 | | av = TALLOC(argc + 2, char *, "argv");
| | | 3670 | | if (argc > 0) | | | 3671 | | BCOPY((char *)&argv[0], (char *)&av[1], argc * sizeof(char*));
| | | 3672 | | av[0] = fn; | | | 3673 | | av[argc + 1] = 0; | | | 3674 | | | | | 3675 | | if (!fork()) { | | | 3676 | | (void)close(pfd[0]); | | | 3677 | | | | | 3678 | | if (!fork()) { | | | 3679 | | if (pfd[1] != 1) | | | 3680 | | dup2(pfd[1], 1); | | | 3681 | | for (n = getdtablesize(); n-- > 0; ) | | | 3682 | | if (n != 1) | | | 3683 | | (void)close(n); | | | 3684 | | (void)open("/dev/null", O_RDONLY, 0);
| | | 3685 | | (void)open("/dev/null", O_WRONLY, 0);
| | | 3686 | | (void)signal(SIGINT, SIG_IGN);
| | | 3687 | | (void)signal(SIGQUIT, SIG_IGN);
| | | 3688 | | #ifndef IMA_OS2 | | | 3689 | | (void)signal(SIGTSTP, SIG_IGN);
| | | 3690 | | #endif | | | 3691 | | execvp(av[0], av); | | | 3692 | | } | | | 3693 | | _exit(0); | | | 3694 | | } | | | 3695 | | (void)close(pfd[1]); | | | 3696 | | (void)wait(0); | | | 3697 | | PVM_FREE(av);
| | | 3698 | | | | | 3699 | | if (!(ff = fdopen(pfd[0], "r"))) { | | | 3700 | | cc = PvmSysErr;
| | | 3701 | | (void)close(pfd[0]); | | | 3702 | | goto bail; | | | 3703 | | } | | | 3704 | | | | | 3705 | | strcpy(buf, "PVMSOCK="); | | | 3706 | | n = strlen(buf); | | | 3707 | | if (!fgets(buf + n, sizeof(buf) - n - 1, ff)) { | | | 3708 | | cc = PvmCantStart;
| | | 3709 | | fclose(ff); | | | 3710 | | goto bail; | | | 3711 | | } | | | 3712 | | fclose(ff); | | | 3713 | | if (strlen(buf + n) < 2) { | | | 3714 | | cc = PvmCantStart;
| | | 3715 | | goto bail; | | | 3716 | | } | | | 3717 | | n = strlen(buf); | | | 3718 | | if (buf[n - 1] == '\n') | | | 3719 | | buf[n - 1] = 0; | | | 3720 | | pvmputenv(STRALLOC(buf));
| | | 3721 | | | | | 3722 | | | | | 3723 | | | | | 3724 | | #endif | | | 3725 | | | | | 3726 | | if (cc = BEATASK)
| | | 3727 | | goto bail; | | | 3728 | | | | | 3729 | | if (block) { | | | 3730 | | struct pvmhostinfo *hip; | | | 3731 | | int t = 1; | | | 3732 | | |
| | 561 | | | | | | pvm_setsbuf(mid) | | | 562 | | | | | | int mid; | | | 563 | | | | | | { | | | 564 | | | | | | struct pmsg *mp = 0; | | | 565 | | | | | | int cc = 0; | | | 566 | | | | | | TEV_DECLS
| | | 567 | | | | | | | | | 568 | | | | | | if (TEV_EXCLUSIVE) {
| | | 569 | | | | | | if (TEV_DO_TRACE(TEV_SETSBUF,TEV_EVENT_ENTRY)) {
| | | 570 | | | | | | TEV_PACK_INT( TEV_DID_MB, TEV_DATA_SCALAR, &mid, 1, 1 );
| | | 571 | | | | | | TEV_FIN;
| | | 572 | | | | | | } | | | 573 | | | | | | } | | | 574 | | | | | | | | | 575 | | | | | | if (mid < 0) { | | | 576 | | | | | | cc = PvmBadParam;
| | | 577 | | | | | | } else if (mid == 0) { | | | 578 | | | | | | cc = pvmsbuf ? pvmsbuf->m_mid : 0; | | | 579 | | | | | | pvmsbuf = 0; | | | 580 | | | | | | } else if (mp = midtobuf(mid)) { | | | 581 | | | | | | if (mp == pvmrbuf) | | | 582 | | | | | | pvmrbuf = 0; | | | 583 | | | | | | cc = pvmsbuf ? pvmsbuf->m_mid : 0; | | | 584 | | | | | | pvmsbuf = mp; | | | 585 | | | | | | (mp->m_codef->enc_init)(mp); | | | 586 | | | | | | } else | | | 587 | | | | | | cc = PvmNoSuchBuf;
| | | 588 | | | | | | | | | 589 | | | | | | if (TEV_AMEXCL) {
| | | 590 | | | | | | if (TEV_DO_TRACE(TEV_SETSBUF,TEV_EVENT_EXIT)) {
| | | 591 | | | | | | TEV_PACK_INT( TEV_DID_MSB, TEV_DATA_SCALAR, &cc, 1, 1 );
| | | 592 | | | | | | TEV_FIN;
| | | 593 | | | | | | } | | | 594 | | | | | | TEV_ENDEXCL;
| | | 595 | | | | | | } | | | 596 | | | | | | | | | 597 | | | | | | if (cc < 0) | | | 598 | | | | | | lpvmerr("pvm_setsbuf", cc); | | | 599 | | | | | | return cc; | | hip is uninitialized | 600 | | | | | | } |
| | 629 | | | | | | pvm_setrbuf(mid) | | | 630 | | | | | | int mid; | | | 631 | | | | | | { | | | 632 | | | | | | struct pmsg *mp = 0; | | | 633 | | | | | | int cc = 0; | | | 634 | | | | | | TEV_DECLS
| | | 635 | | | | | | | | | 636 | | | | | | if (TEV_EXCLUSIVE) {
| | | 637 | | | | | | if (TEV_DO_TRACE(TEV_SETRBUF,TEV_EVENT_ENTRY)) {
| | | 638 | | | | | | TEV_PACK_INT( TEV_DID_MB, TEV_DATA_SCALAR, &mid, 1, 1 );
| | | 639 | | | | | | TEV_FIN;
| | | 640 | | | | | | } | | | 641 | | | | | | } | | | 642 | | | | | | | | | 643 | | | | | | if (mid < 0) { | | | 644 | | | | | | cc = PvmBadParam;
| | | 645 | | | | | | } else if (mid == 0) { | | | 646 | | | | | | cc = pvmrbuf ? pvmrbuf->m_mid : 0; | | | 647 | | | | | | pvmrbuf = 0; | | | 648 | | | | | | } else if (mp = midtobuf(mid)) { | | | 649 | | | | | | if (mp == pvmsbuf) | | | 650 | | | | | | pvmsbuf = 0; | | | 651 | | | | | | cc = pvmrbuf ? pvmrbuf->m_mid : 0; | | | 652 | | | | | | pvmrbuf = mp; | | | 653 | | | | | | (mp->m_codef->dec_init)(mp); | | | 654 | | | | | | } else | | | 655 | | | | | | cc = PvmNoSuchBuf;
| | | 656 | | | | | | | | | 657 | | | | | | if (TEV_AMEXCL) {
| | | 658 | | | | | | if (TEV_DO_TRACE(TEV_SETRBUF,TEV_EVENT_EXIT)) {
| | | 659 | | | | | | TEV_PACK_INT( TEV_DID_MRB, TEV_DATA_SCALAR, &cc, 1, 1 );
| | | 660 | | | | | | TEV_FIN;
| | | 661 | | | | | | } | | | 662 | | | | | | TEV_ENDEXCL;
| | | 663 | | | | | | } | | | 664 | | | | | | | | | 665 | | | | | | if (cc < 0) | | | 666 | | | | | | lpvmerr("pvm_setrbuf", cc); | | | 667 | | | | | | return cc; | | hip is uninitialized | 668 | | | | | | } |
| | 2052 | | | | if (pvmschedtid) | | | 2053 | | | | cc = msendrecv(pvmschedtid, SM_CONFIG, PvmBaseContext);
| | | 2054 | | | | else | | | 2055 | | | | cc = msendrecv(TIDPVMD, TM_CONFIG, SYSCTX_TM);
| | | 2056 | | | | if (cc > 0) { | | | 2057 | | | | pvm_upkint(&nhost, 1, 1); | | | 2058 | | | | pvm_upkint(&narch, 1, 1); | | | 2059 | | | | hlist = TALLOC(nhost, struct pvmhostinfo, "hi");
| | | 2060 | | | | for (i = 0; i < nhost; i++) { | | | 2061 | | | | pvm_upkint(&hlist[i].hi_tid, 1, 1); | | | 2062 | | | | pvmupkstralloc(&(hlist[i].hi_name)); | | | 2063 | | | | pvmupkstralloc(&(hlist[i].hi_arch)); | | | 2064 | | | | pvm_upkint(&hlist[i].hi_speed, 1, 1); | | | 2065 | | | | pvm_upkint(&hlist[i].hi_dsig, 1, 1); | | | 2066 | | | | } | | | 2067 | | | | pvm_freebuf(pvm_setrbuf(rbf)); | | | 2068 | | | | if (nhostp) | | | 2069 | | | | *nhostp = nhost; | | | 2070 | | | | if (narchp) | | | 2071 | | | | *narchp = narch; | | | 2072 | | | | if (hostp) | | | 2073 | | | | *hostp = hlist; | | | 2074 | | | | cc = 0; | | | 2075 | | | | } | | | 2076 | | | | pvm_freebuf(pvm_setsbuf(sbf)); | | | 2077 | | | | pvm_setrbuf(rbf); | | | 2078 | | | | } | | | 2079 | | | | | | | 2080 | | | | if (TEV_AMEXCL) {
| | | 2081 | | | | if (TEV_DO_TRACE(TEV_CONFIG,TEV_EVENT_EXIT)) {
| | | 2082 | | | | TEV_PACK_INT( TEV_DID_NH, TEV_DATA_SCALAR, &nhost, 1, 1 );
| | | 2083 | | | | TEV_PACK_INT( TEV_DID_NA, TEV_DATA_SCALAR, &narch, 1, 1 );
| | | 2084 | | | | TEV_PACK_INT( TEV_DID_CC, TEV_DATA_SCALAR, &cc, 1, 1 );
| | | 2085 | | | | TEV_FIN;
| | | 2086 | | | | } | | | 2087 | | | | TEV_ENDEXCL;
| | | 2088 | | | | } | | | 2089 | | | | | | | 2090 | | | | if (cc < 0) | | | 2091 | | | | lpvmerr("pvm_config", cc); | | | 2092 | | | | return cc; | | hip is uninitialized | 2093 | | | | } |
|