Skip to content

Commit 0b23ace

Browse files
Shanmuganandhlukeis
authored andcommitted
Fixed temp cookie file handle leak in PhantomJS
Fixes #1854 Signed-off-by: Luke Inman-Semerau <[email protected]>
1 parent 6094ebf commit 0b23ace

File tree

2 files changed

+56
-2
lines changed

2 files changed

+56
-2
lines changed

py/selenium/webdriver/phantomjs/service.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def __init__(self, executable_path, port=0, service_args=None, log_path=None):
4242
if not log_path:
4343
log_path = "ghostdriver.log"
4444
if not self._args_contain("--cookies-file="):
45-
self._cookie_temp_file = tempfile.mkstemp()[1]
45+
self._cookie_temp_file_handle, self._cookie_temp_file = tempfile.mkstemp()
4646
self.service_args.append("--cookies-file=" + self._cookie_temp_file)
4747
else:
4848
self._cookie_temp_file = None
@@ -65,4 +65,5 @@ def service_url(self):
6565

6666
def send_remote_shutdown_command(self):
6767
if self._cookie_temp_file:
68-
os.remove(self._cookie_temp_file)
68+
os.close(self._cookie_temp_file_handle)
69+
os.remove(self._cookie_temp_file)
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
# Licensed to the Software Freedom Conservancy (SFC) under one
2+
# or more contributor license agreements. See the NOTICE file
3+
# distributed with this work for additional information
4+
# regarding copyright ownership. The SFC licenses this file
5+
# to you under the Apache License, Version 2.0 (the
6+
# "License"); you may not use this file except in compliance
7+
# with the License. You may obtain a copy of the License at
8+
#
9+
# http://www.apache.org/licenses/LICENSE-2.0
10+
#
11+
# Unless required by applicable law or agreed to in writing,
12+
# software distributed under the License is distributed on an
13+
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
14+
# KIND, either express or implied. See the License for the
15+
# specific language governing permissions and limitations
16+
# under the License.
17+
18+
import psutil
19+
import unittest
20+
import logging
21+
from selenium import webdriver
22+
23+
24+
class PhantomJSLauncherTests(unittest.TestCase):
25+
26+
def testLaunchAndCloseBrowserWithoutLeakingCookieTempFileDescriptor(self):
27+
28+
# psutil module is used to get num open file descritors across platforms
29+
self.p = psutil.Process()
30+
31+
self.num_fds_samples = []
32+
33+
self.driver = webdriver.PhantomJS()
34+
self.driver.quit()
35+
36+
self.num_fds_samples.append(self.p.num_fds())
37+
38+
self.driver = webdriver.PhantomJS()
39+
self.driver.quit()
40+
41+
self.num_fds_samples.append(self.p.num_fds())
42+
43+
self.driver = webdriver.PhantomJS()
44+
self.driver.quit()
45+
46+
self.num_fds_samples.append(self.p.num_fds())
47+
48+
assert max(self.num_fds_samples) == min(self.num_fds_samples)
49+
50+
51+
if __name__ == "__main__":
52+
logging.basicConfig(level=logging.INFO)
53+
unittest.main()

0 commit comments

Comments
 (0)