Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(975)

Side by Side Diff: runtime/bin/process_fuchsia.cc

Issue 2935483002: Update Fuchsia-specific code to use the new MX_ error names (Closed)
Patch Set: not windows tho Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/bin/crypto_fuchsia.cc ('k') | runtime/vm/os_fuchsia.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #if !defined(DART_IO_DISABLED) 5 #if !defined(DART_IO_DISABLED)
6 6
7 #include "platform/globals.h" 7 #include "platform/globals.h"
8 #if defined(HOST_OS_FUCHSIA) 8 #if defined(HOST_OS_FUCHSIA)
9 9
10 #include "bin/process.h" 10 #include "bin/process.h"
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
331 static void HandleInterruptMsg() { 331 static void HandleInterruptMsg() {
332 ASSERT(items_[0].handle == interrupt_out_); 332 ASSERT(items_[0].handle == interrupt_out_);
333 ASSERT(items_[0].waitfor == MX_SOCKET_READABLE); 333 ASSERT(items_[0].waitfor == MX_SOCKET_READABLE);
334 ASSERT((items_[0].pending & MX_SOCKET_READABLE) != 0); 334 ASSERT((items_[0].pending & MX_SOCKET_READABLE) != 0);
335 while (true) { 335 while (true) {
336 Message msg; 336 Message msg;
337 size_t actual = 0; 337 size_t actual = 0;
338 LOG_INFO("ExitCodeHandler thread reading interrupt message\n"); 338 LOG_INFO("ExitCodeHandler thread reading interrupt message\n");
339 mx_status_t status = 339 mx_status_t status =
340 mx_socket_read(interrupt_out_, 0, &msg, sizeof(msg), &actual); 340 mx_socket_read(interrupt_out_, 0, &msg, sizeof(msg), &actual);
341 if (status == ERR_SHOULD_WAIT) { 341 if (status == MX_ERR_SHOULD_WAIT) {
342 LOG_INFO("ExitCodeHandler thread done reading interrupt messages\n"); 342 LOG_INFO("ExitCodeHandler thread done reading interrupt messages\n");
343 return; 343 return;
344 } 344 }
345 if (status < 0) { 345 if (status < 0) {
346 FATAL1("Failed to read exit handler interrupt handle: %s\n", 346 FATAL1("Failed to read exit handler interrupt handle: %s\n",
347 mx_status_get_string(status)); 347 mx_status_get_string(status));
348 } 348 }
349 if (actual < sizeof(msg)) { 349 if (actual < sizeof(msg)) {
350 FATAL1("Short read from exit handler interrupt handle: %ld\n", actual); 350 FATAL1("Short read from exit handler interrupt handle: %ld\n", actual);
351 } 351 }
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
431 intptr_t Process::CurrentProcessId() { 431 intptr_t Process::CurrentProcessId() {
432 return static_cast<intptr_t>(getpid()); 432 return static_cast<intptr_t>(getpid());
433 } 433 }
434 434
435 435
436 int64_t Process::CurrentRSS() { 436 int64_t Process::CurrentRSS() {
437 mx_info_task_stats_t task_stats; 437 mx_info_task_stats_t task_stats;
438 mx_handle_t process = mx_process_self(); 438 mx_handle_t process = mx_process_self();
439 mx_status_t status = mx_object_get_info( 439 mx_status_t status = mx_object_get_info(
440 process, MX_INFO_TASK_STATS, &task_stats, sizeof(task_stats), NULL, NULL); 440 process, MX_INFO_TASK_STATS, &task_stats, sizeof(task_stats), NULL, NULL);
441 if (status != NO_ERROR) { 441 if (status != MX_OK) {
442 // TODO(zra): Translate this to a Unix errno. 442 // TODO(zra): Translate this to a Unix errno.
443 errno = status; 443 errno = status;
444 return -1; 444 return -1;
445 } 445 }
446 return task_stats.mem_private_bytes + task_stats.mem_shared_bytes; 446 return task_stats.mem_private_bytes + task_stats.mem_shared_bytes;
447 } 447 }
448 448
449 449
450 int64_t Process::MaxRSS() { 450 int64_t Process::MaxRSS() {
451 // There is currently no way to get the high watermark value on Fuchsia, so 451 // There is currently no way to get the high watermark value on Fuchsia, so
(...skipping 153 matching lines...) Expand 10 before | Expand all | Expand 10 after
605 } 605 }
606 // We can only use mx_task_kill if we know id is a process handle, and we only 606 // We can only use mx_task_kill if we know id is a process handle, and we only
607 // know that for sure if it's in our list. 607 // know that for sure if it's in our list.
608 mx_handle_t process = static_cast<mx_handle_t>(id); 608 mx_handle_t process = static_cast<mx_handle_t>(id);
609 if (!ProcessInfoList::Exists(process)) { 609 if (!ProcessInfoList::Exists(process)) {
610 LOG_ERR("Process %ld wasn't in the ProcessInfoList\n", id); 610 LOG_ERR("Process %ld wasn't in the ProcessInfoList\n", id);
611 errno = ESRCH; // No such process. 611 errno = ESRCH; // No such process.
612 return false; 612 return false;
613 } 613 }
614 mx_status_t status = mx_task_kill(process); 614 mx_status_t status = mx_task_kill(process);
615 if (status != NO_ERROR) { 615 if (status != MX_OK) {
616 LOG_ERR("mx_task_kill failed: %s\n", mx_status_get_string(status)); 616 LOG_ERR("mx_task_kill failed: %s\n", mx_status_get_string(status));
617 errno = EPERM; // TODO(zra): Figure out what it really should be. 617 errno = EPERM; // TODO(zra): Figure out what it really should be.
618 return false; 618 return false;
619 } 619 }
620 LOG_INFO("Signal %d sent successfully to process %ld\n", signal, id); 620 LOG_INFO("Signal %d sent successfully to process %ld\n", signal, id);
621 return true; 621 return true;
622 } 622 }
623 623
624 624
625 class ProcessStarter { 625 class ProcessStarter {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
693 *os_error_message_ = DartUtils::ScopedCopyCString( 693 *os_error_message_ = DartUtils::ScopedCopyCString(
694 "Failed to create exit code pipe for process start."); 694 "Failed to create exit code pipe for process start.");
695 return result; 695 return result;
696 } 696 }
697 LOG_INFO("ProcessStarter: Start() set up exit_pipe_fds (%d, %d)\n", 697 LOG_INFO("ProcessStarter: Start() set up exit_pipe_fds (%d, %d)\n",
698 exit_pipe_fds[0], exit_pipe_fds[1]); 698 exit_pipe_fds[0], exit_pipe_fds[1]);
699 699
700 // Set up a launchpad. 700 // Set up a launchpad.
701 launchpad_t* lp = NULL; 701 launchpad_t* lp = NULL;
702 mx_status_t status = SetupLaunchpad(&lp); 702 mx_status_t status = SetupLaunchpad(&lp);
703 if (status != NO_ERROR) { 703 if (status != MX_OK) {
704 close(exit_pipe_fds[0]); 704 close(exit_pipe_fds[0]);
705 close(exit_pipe_fds[1]); 705 close(exit_pipe_fds[1]);
706 return status; 706 return status;
707 } 707 }
708 ASSERT(lp != NULL); 708 ASSERT(lp != NULL);
709 709
710 // Launch it. 710 // Launch it.
711 LOG_INFO("ProcessStarter: Start() Calling launchpad_start\n"); 711 LOG_INFO("ProcessStarter: Start() Calling launchpad_start\n");
712 mx_handle_t process = MX_HANDLE_INVALID; 712 mx_handle_t process = MX_HANDLE_INVALID;
713 const char* errormsg = NULL; 713 const char* errormsg = NULL;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
759 759
760 mx_status_t SetupLaunchpad(launchpad_t** launchpad) { 760 mx_status_t SetupLaunchpad(launchpad_t** launchpad) {
761 // Set up a vmo for the binary. 761 // Set up a vmo for the binary.
762 mx_handle_t binary_vmo = launchpad_vmo_from_file(path_); 762 mx_handle_t binary_vmo = launchpad_vmo_from_file(path_);
763 CHECK_FOR_ERROR(binary_vmo, "launchpad_vmo_from_file"); 763 CHECK_FOR_ERROR(binary_vmo, "launchpad_vmo_from_file");
764 764
765 // Run the child process in the same "job". 765 // Run the child process in the same "job".
766 mx_handle_t job = MX_HANDLE_INVALID; 766 mx_handle_t job = MX_HANDLE_INVALID;
767 mx_status_t status = 767 mx_status_t status =
768 mx_handle_duplicate(mx_job_default(), MX_RIGHT_SAME_RIGHTS, &job); 768 mx_handle_duplicate(mx_job_default(), MX_RIGHT_SAME_RIGHTS, &job);
769 if (status != NO_ERROR) { 769 if (status != MX_OK) {
770 mx_handle_close(binary_vmo); 770 mx_handle_close(binary_vmo);
771 } 771 }
772 CHECK_FOR_ERROR(status, "mx_handle_duplicate"); 772 CHECK_FOR_ERROR(status, "mx_handle_duplicate");
773 773
774 // Set up the launchpad. 774 // Set up the launchpad.
775 launchpad_t* lp = NULL; 775 launchpad_t* lp = NULL;
776 launchpad_create(job, program_arguments_[0], &lp); 776 launchpad_create(job, program_arguments_[0], &lp);
777 launchpad_set_args(lp, program_arguments_count_, program_arguments_); 777 launchpad_set_args(lp, program_arguments_count_, program_arguments_);
778 launchpad_set_environ(lp, program_environment_); 778 launchpad_set_environ(lp, program_environment_);
779 launchpad_clone(lp, LP_CLONE_MXIO_ROOT); 779 launchpad_clone(lp, LP_CLONE_MXIO_ROOT);
780 // TODO(zra): Use the supplied working directory when launchpad adds an 780 // TODO(zra): Use the supplied working directory when launchpad adds an
781 // API to set it. 781 // API to set it.
782 launchpad_clone(lp, LP_CLONE_MXIO_CWD); 782 launchpad_clone(lp, LP_CLONE_MXIO_CWD);
783 launchpad_add_pipe(lp, &write_out_, 0); 783 launchpad_add_pipe(lp, &write_out_, 0);
784 launchpad_add_pipe(lp, &read_in_, 1); 784 launchpad_add_pipe(lp, &read_in_, 1);
785 launchpad_add_pipe(lp, &read_err_, 2); 785 launchpad_add_pipe(lp, &read_err_, 2);
786 launchpad_add_vdso_vmo(lp); 786 launchpad_add_vdso_vmo(lp);
787 launchpad_elf_load(lp, binary_vmo); 787 launchpad_elf_load(lp, binary_vmo);
788 launchpad_load_vdso(lp, MX_HANDLE_INVALID); 788 launchpad_load_vdso(lp, MX_HANDLE_INVALID);
789 *launchpad = lp; 789 *launchpad = lp;
790 return NO_ERROR; 790 return MX_OK;
791 } 791 }
792 792
793 #undef CHECK_FOR_ERROR 793 #undef CHECK_FOR_ERROR
794 794
795 int read_in_; // Pipe for stdout to child process. 795 int read_in_; // Pipe for stdout to child process.
796 int read_err_; // Pipe for stderr to child process. 796 int read_err_; // Pipe for stderr to child process.
797 int write_out_; // Pipe for stdin to child process. 797 int write_out_; // Pipe for stdin to child process.
798 798
799 char** program_arguments_; 799 char** program_arguments_;
800 intptr_t program_arguments_count_; 800 intptr_t program_arguments_count_;
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
845 } 845 }
846 846
847 void Process::ClearSignalHandler(intptr_t signal) {} 847 void Process::ClearSignalHandler(intptr_t signal) {}
848 848
849 } // namespace bin 849 } // namespace bin
850 } // namespace dart 850 } // namespace dart
851 851
852 #endif // defined(HOST_OS_FUCHSIA) 852 #endif // defined(HOST_OS_FUCHSIA)
853 853
854 #endif // !defined(DART_IO_DISABLED) 854 #endif // !defined(DART_IO_DISABLED)
OLDNEW
« no previous file with comments | « runtime/bin/crypto_fuchsia.cc ('k') | runtime/vm/os_fuchsia.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698