Skip to content

GPIO library doesn't free GPIO file descriptor. File descriptor leak. #145

@Red-Eyed

Description

@Red-Eyed

Hello, I found such issue.
I got example of LED and run it.
LED are blink for about minute and that's all.
I run strace and found such error:

select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr0/brightness", O_WRONLY) = 1023
open("/sys/class/leds/beaglebone:green:usr0/brightness", O_WRONLY) = -1 EMFILE (Too many open files)
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr1/brightness", O_WRONLY) = -1 EMFILE (Too many open files)
open("/sys/class/leds/beaglebone:green:mmc0/brightness", O_WRONLY) = -1 EMFILE (Too many open files)
  • Platform/operating system (i.e. Raspberry Pi with Raspbian operating system,
    Windows 32-bit, Windows 64-bit, Mac OSX 64-bit, etc.):
platform.platform()
'Linux-3.8.13-bone79-armv7l-with-debian-7.11'
platform.linux_distribution()
('debian', '7.11', '')
  • Python version (run python -version or python3 -version):
platform.python_version()
'2.7.3'

  • Error message you are receiving, including any Python exception traces:
    Library doesn't emit any messages. I did strace.
    Here strace logs:
root@beaglebone:/home/debian# strace -f python programs/beaglebone-test.py
...
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr2/brightness", O_WRONLY) = 9
open("/sys/class/leds/beaglebone:green:usr2/brightness", O_WRONLY) = 10
write(10, "1", 1)                       = 1
close(10)                               = 0
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr3/brightness", O_WRONLY) = 10
open("/sys/class/leds/beaglebone:green:usr3/brightness", O_WRONLY) = 11
write(11, "1", 1)                       = 1
close(11)                               = 0
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr0/brightness", O_WRONLY) = 11
open("/sys/class/leds/beaglebone:green:usr0/brightness", O_WRONLY) = 12
write(12, "0", 1)                       = 1
close(12)                               = 0
...
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr2/brightness", O_WRONLY) = 1021
open("/sys/class/leds/beaglebone:green:usr2/brightness", O_WRONLY) = 1022
write(1022, "0", 1)                     = 1
close(1022)                             = 0
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr3/brightness", O_WRONLY) = 1022
open("/sys/class/leds/beaglebone:green:usr3/brightness", O_WRONLY) = 1023
write(1023, "0", 1)                     = 1
close(1023)                             = 0
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr0/brightness", O_WRONLY) = 1023
open("/sys/class/leds/beaglebone:green:usr0/brightness", O_WRONLY) = -1 EMFILE (Too many open files)
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
open("/sys/class/leds/beaglebone:green:usr1/brightness", O_WRONLY) = -1 EMFILE (Too many open files)
open("/sys/class/leds/beaglebone:green:mmc0/brightness", O_WRONLY) = -1 EMFILE (Too many open files)
select(0, NULL, NULL, NULL, {0, 100000}) = 0 (Timeout)
...
and so on
  • List the steps to reproduce the problem below (if possible attach code or commands
    to run):
    On BeagleBone with debian 7 run as root the "On-Board LEDs" example with sleep(0.1) and
    wait several minutes. Then you will see that LEDs stop blinking, and program doesn't emit any error.
    To get error logs:
    Code:
# beaglebone-test.py
import Adafruit_BBIO.GPIO as GPIO
import time

if __name__=="__main__":
    for i in range(4):
        GPIO.setup("USR%d" % i, GPIO.OUT)

    while True:
        for i in range(4):
            GPIO.output("USR%d" % i, GPIO.HIGH)
            time.sleep(0.1)
        for i in range(4):
            GPIO.output("USR%d" % i, GPIO.LOW)
            time.sleep(0.1)

Run script:
strace -f python programs/beaglebone-test.py

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      pFad - Phonifier reborn

      Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

      Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


      Alternative Proxies:

      Alternative Proxy

      pFad Proxy

      pFad v3 Proxy

      pFad v4 Proxy