Home | History | Annotate | Download | only in patch
      1 --- a/base/process/process_metrics_unittest.cc
      2 +++ b/base/process/process_metrics_unittest.cc
      3 @@ -569,6 +569,9 @@ MULTIPROCESS_TEST_MAIN(ChildMain) {
      4  
      5  }  // namespace
      6  
      7 +// ARC note: don't compile as SpawnMultiProcessTestChild brings in a lot of
      8 +// extra dependency.
      9 +#if !defined(OS_ANDROID) && !defined(__ANDROID__) && !defined(__ANDROID_HOST__)
     10  TEST(ProcessMetricsTest, GetChildOpenFdCount) {
     11    ScopedTempDir temp_dir;
     12    ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
     13 @@ -582,9 +585,23 @@ TEST(ProcessMetricsTest, GetChildOpenFdCount) {
     14  
     15    std::unique_ptr<ProcessMetrics> metrics(
     16        ProcessMetrics::CreateProcessMetrics(child.Handle()));
     17 -  EXPECT_EQ(0, metrics->GetOpenFdCount());
     18 +  // Try a couple times to observe the child with 0 fds open.
     19 +  // Sometimes we've seen that the child can have 1 remaining
     20 +  // fd shortly after receiving the signal.  Potentially this
     21 +  // is actually the signal file still open in the child.
     22 +  int open_fds = -1;
     23 +  for (int tries = 0; tries < 5; ++tries) {
     24 +    open_fds = metrics->GetOpenFdCount();
     25 +    if (!open_fds) {
     26 +      break;
     27 +    }
     28 +    PlatformThread::Sleep(TimeDelta::FromMilliseconds(1));
     29 +  }
     30 +  EXPECT_EQ(0, open_fds);
     31    ASSERT_TRUE(child.Terminate(0, true));
     32  }
     33 +#endif  // !defined(__ANDROID__)
     34 +
     35  #endif  // defined(OS_LINUX)
     36  
     37  #if defined(OS_ANDROID) || defined(OS_LINUX)
     38 --- a/base/test/multiprocess_test.cc
     39 +++ b/base/test/multiprocess_test.cc
     40 @@ -13,7 +13,7 @@
     41  
     42  namespace base {
     43  
     44 -#if !defined(OS_ANDROID)
     45 +#if !defined(OS_ANDROID) && !defined(__ANDROID__) && !defined(__ANDROID_HOST__)
     46  Process SpawnMultiProcessTestChild(const std::string& procname,
     47                                     const CommandLine& base_command_line,
     48                                     const LaunchOptions& options) {
     49 @@ -39,7 +39,7 @@ bool TerminateMultiProcessTestChild(const Process& process,
     50    return process.Terminate(exit_code, wait);
     51  }
     52  
     53 -#endif  // !defined(OS_ANDROID)
     54 +#endif  // !OS_ANDROID && !__ANDROID__ && !__ANDROID_HOST__
     55  
     56  CommandLine GetMultiProcessTestChildBaseCommandLine() {
     57    base::ScopedAllowBlockingForTesting allow_blocking;
     58 @@ -52,6 +52,8 @@ CommandLine GetMultiProcessTestChildBaseCommandLine() {
     59  
     60  MultiProcessTest::MultiProcessTest() = default;
     61  
     62 +// Don't compile on ARC.
     63 +#if 0
     64  Process MultiProcessTest::SpawnChild(const std::string& procname) {
     65    LaunchOptions options;
     66  #if defined(OS_WIN)
     67 @@ -64,6 +66,7 @@ Process MultiProcessTest::SpawnChildWithOptions(const std::string& procname,
     68                                                  const LaunchOptions& options) {
     69    return SpawnMultiProcessTestChild(procname, MakeCmdLine(procname), options);
     70  }
     71 +#endif
     72  
     73  CommandLine MultiProcessTest::MakeCmdLine(const std::string& procname) {
     74    CommandLine command_line = GetMultiProcessTestChildBaseCommandLine();
     75