673 }
674
675 fds[0] = (in [1] != -1) ? in [1] : -1;
676 fds[1] = (out[0] != -1) ? out[0] : -1;
677 fds[2] = (err[0] != -1) ? err[0] : -1;
678
679 Finally:
680 free(c->clone_stack);
681
682 /* Always clean up the child's side of the pipes */
683 closeSafely(in [0]);
684 closeSafely(out[1]);
685 closeSafely(err[1]);
686
687 /* Always clean up fail and childEnv descriptors */
688 closeSafely(fail[0]);
689 closeSafely(fail[1]);
690 closeSafely(childenv[0]);
691 closeSafely(childenv[1]);
692
693 releaseBytes(env, prog, pprog);
694 releaseBytes(env, argBlock, pargBlock);
695 releaseBytes(env, envBlock, penvBlock);
696 releaseBytes(env, dir, c->pdir);
697
698 free(c->argv);
699 free(c->envv);
700 free(c);
701
702 if (fds != NULL)
703 (*env)->ReleaseIntArrayElements(env, std_fds, fds, 0);
704
705 return resultPid;
706
707 Catch:
708 /* Clean up the parent's side of the pipes in case of failure only */
709 closeSafely(in [1]); in[1] = -1;
710 closeSafely(out[0]); out[0] = -1;
711 closeSafely(err[0]); err[0] = -1;
712 goto Finally;
|
673 }
674
675 fds[0] = (in [1] != -1) ? in [1] : -1;
676 fds[1] = (out[0] != -1) ? out[0] : -1;
677 fds[2] = (err[0] != -1) ? err[0] : -1;
678
679 Finally:
680 free(c->clone_stack);
681
682 /* Always clean up the child's side of the pipes */
683 closeSafely(in [0]);
684 closeSafely(out[1]);
685 closeSafely(err[1]);
686
687 /* Always clean up fail and childEnv descriptors */
688 closeSafely(fail[0]);
689 closeSafely(fail[1]);
690 closeSafely(childenv[0]);
691 closeSafely(childenv[1]);
692
693 releaseBytes(env, helperpath, phelperpath);
694 releaseBytes(env, prog, pprog);
695 releaseBytes(env, argBlock, pargBlock);
696 releaseBytes(env, envBlock, penvBlock);
697 releaseBytes(env, dir, c->pdir);
698
699 free(c->argv);
700 free(c->envv);
701 free(c);
702
703 if (fds != NULL)
704 (*env)->ReleaseIntArrayElements(env, std_fds, fds, 0);
705
706 return resultPid;
707
708 Catch:
709 /* Clean up the parent's side of the pipes in case of failure only */
710 closeSafely(in [1]); in[1] = -1;
711 closeSafely(out[0]); out[0] = -1;
712 closeSafely(err[0]); err[0] = -1;
713 goto Finally;
|