isamert / scli

a simple terminal user interface for signal messenger (using signal-cli)
GNU General Public License v3.0
432 stars 40 forks source link

[Errno 24] Too many open files on start up #205

Closed riazm closed 1 year ago

riazm commented 1 year ago

Hello, when I try to launch scli I get the following:

Traceback (most recent call last):                                              
  File "/home/r/projects/scli/./scli", line 5245, in <module>
    main()                              
  File "/home/r/projects/scli/./scli", line 5239, in main
    loop.run()                                                                  
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 287, in run
    self._run() 
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 385, in _run
    self.event_loop.run()
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 790, in run
    self._loop()                        
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 827, in _loop
    self._watch_files[fd]()                                                     
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 233, in cb
    rval = callback(data)               
  File "/home/r/projects/scli/./scli", line 539, in watchpipe_handler
    callback(proc, *callback_args, **callback_kwargs)
  File "/home/r/projects/scli/./scli", line 997, in proc_callback
    callback(numbers, *cb_args, **cb_kwargs)
  File "/home/r/projects/scli/./scli", line 1020, in on_got_numbers
    self._get_contact_name(num, callback=on_got_name)
  File "/home/r/projects/scli/./scli", line 1009, in _get_contact_name
    self._dbus_send_signal_cli(args, callback=proc_callback)
  File "/home/r/projects/scli/./scli", line 731, in _dbus_send_signal_cli
    return self._dbus_send(args, *proc_args, **proc_kwargs)                 
  File "/home/r/projects/scli/./scli", line 719, in _dbus_send
    proc = self.run(args, *proc_args, **proc_kwargs) 
  File "/home/r/projects/scli/./scli", line 554, in run
    proc = subprocess.Popen(                                                    
  File "/usr/lib/python3.10/subprocess.py", line 969, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.10/subprocess.py", line 1744, in _execute_child
    errpipe_read, errpipe_write = os.pipe()                                 
OSError: [Errno 24] Too many open files

I tried running ulimit -n 2048 and re running but that gets me

Traceback (most recent call last):                                              
  File "/home/r/projects/scli/./scli", line 5245, in <module>                   
    main()                                                                      
  File "/home/r/projects/scli/./scli", line 5239, in main       
    loop.run()                                                                  
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 287, in run
    self._run()                         
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 385, in _run
    self.event_loop.run()         
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 790, in run
    self._loop()
  File "/usr/lib/python3/dist-packages/urwid/main_loop.py", line 811, in _loop
    ready, w, err = select.select(fds, [], fds, timeout)                        
ValueError: filedescriptor out of range in select()  

I am on tip of master, https://github.com/isamert/scli/commit/e65ece04fbab2bbc79dce1724bc5b50d3888f8b3

exquo commented 1 year ago

Thanks for reporting this! Since 8ccae9f08afd28682af69b9512304152a4e3b5af, scli is making more dbus calls at startup than before, to poll user's groups, their members, etc. Each launched subprocess opens file descriptors for I/O.

This can happen if there are groups with many members, or many groups with not-so-many members, etc. As long as the total number of launched calls is large enough.

I'll look into making scli limit the number of concurrent background processes it launches.