A couple of socket fixes so root fenrir and user fenrir do not battle.
This commit is contained in:
@@ -23,7 +23,7 @@ class driver(remoteDriver):
|
||||
def __init__(self):
|
||||
remoteDriver.__init__(self)
|
||||
self.fenrirSocks = []
|
||||
self.socket_files = []
|
||||
self.bound_sockets = []
|
||||
|
||||
def initialize(self, environment):
|
||||
self.env = environment
|
||||
@@ -94,11 +94,16 @@ class driver(remoteDriver):
|
||||
|
||||
def _register_instance(self):
|
||||
settings_manager = self.env["runtime"]["SettingsManager"]
|
||||
active_socket_files = [
|
||||
socket_file
|
||||
for fenrir_sock, socket_file in self.bound_sockets
|
||||
if self._socket_file_matches_socket(fenrir_sock, socket_file)
|
||||
]
|
||||
instance_data = {
|
||||
"pid": os.getpid(),
|
||||
"ppid": os.getppid(),
|
||||
"socket_files": self.socket_files,
|
||||
"main_socket": MAIN_SOCKET_FILE in self.socket_files,
|
||||
"socket_files": active_socket_files,
|
||||
"main_socket": MAIN_SOCKET_FILE in active_socket_files,
|
||||
"screen_driver": settings_manager.get_setting("screen", "driver"),
|
||||
"keyboard_driver": settings_manager.get_setting("keyboard", "driver"),
|
||||
"x11_window_id": settings_manager.get_setting(
|
||||
@@ -108,6 +113,17 @@ class driver(remoteDriver):
|
||||
}
|
||||
remoteInstanceRegistry.write_instance(instance_data)
|
||||
|
||||
def _socket_file_matches_socket(self, fenrir_sock, socket_file):
|
||||
try:
|
||||
socket_stat = os.stat(socket_file)
|
||||
fd_stat = os.fstat(fenrir_sock.fileno())
|
||||
except OSError:
|
||||
return False
|
||||
return (
|
||||
socket_stat.st_dev == fd_stat.st_dev
|
||||
and socket_stat.st_ino == fd_stat.st_ino
|
||||
)
|
||||
|
||||
def _cleanup(self):
|
||||
for fenrir_sock in self.fenrirSocks:
|
||||
try:
|
||||
@@ -116,13 +132,16 @@ class driver(remoteDriver):
|
||||
pass
|
||||
self.fenrirSocks = []
|
||||
|
||||
for socket_file in self.socket_files:
|
||||
for _, socket_file in self.bound_sockets:
|
||||
try:
|
||||
if os.path.exists(socket_file):
|
||||
if (
|
||||
os.path.exists(socket_file)
|
||||
and not self._is_socket_active(socket_file)
|
||||
):
|
||||
os.unlink(socket_file)
|
||||
except OSError:
|
||||
pass
|
||||
self.socket_files = []
|
||||
self.bound_sockets = []
|
||||
remoteInstanceRegistry.remove_instance()
|
||||
|
||||
def _handle_client(self, client_sock, event_queue):
|
||||
@@ -167,7 +186,7 @@ class driver(remoteDriver):
|
||||
if fenrir_sock is None:
|
||||
continue
|
||||
self.fenrirSocks.append(fenrir_sock)
|
||||
self.socket_files.append(socket_file)
|
||||
self.bound_sockets.append((fenrir_sock, socket_file))
|
||||
|
||||
if not self.fenrirSocks:
|
||||
return
|
||||
|
||||
Reference in New Issue
Block a user