SocketcanBus.send() timeout semantics differ from BusABC.send()
Avaliação
- Dificuldade
- 3/5
- Tempo estimado
- 1-2 dias
- Facilidade para iniciantes
- 45/100
- Tipo de issue
- Bug
- Clareza
- Razoavelmente clara
- Status de atividade
- Estagnada
- Stack de tecnologia
- linux, python
- Domínio
- embedded-iot, networking
Direção de pesquisa
Comece comparando a implementação de SocketcanBus.send() com a documentação e o comportamento de BusABC.send() e, em seguida, reproduza o caso de fila cheia descrito com o loop de envio fornecido. Está concluído quando a ausência de um timeout seguir a semântica de bloqueio documentada, enquanto timeouts explícitos mantiverem o comportamento indicado; adicione ou atualize a cobertura para esses casos se os locais de teste existentes forem encontrados.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
Describe the bug
In the send() method of BusABC, the optional timeout argument is documented as
If > 0, wait up to this many seconds for message to be ACK'ed or
for transmit queue to be ready depending on driver implementation.
If timeout is exceeded, an exception will be raised.
Might not be supported by all interfaces.
None blocks indefinitely.
but the SocketcanBus implementation of BusABC documents (and implements) it like this:
Wait up to this many seconds for the transmit queue to be ready.
If not given, the call may fail immediately.
It looks to me like the handling in SocketcanBus just doesn't conform to the expected interface, in particular it does
# If no timeout is given, poll for availability
if timeout is None:
timeout = 0
which results in nonblocking behavior and potentially raising can.CanOperationError("Transmit buffer full") instead of waiting indefinitely when no timeout is specified.
To Reproduce
msg = can.Message(
arbitration_id=0x123, is_extended_id=False, data=[1, 2, 3, 4, 5, 6, 7, 8]
)
with can.Bus(interface="socketcan", channel="can0") as bus:
for i in range(10000):
bus.send(msg)
Observe that sending fails if the sending rate exceeds the capacity of the bus, instead of blocking and waiting.
Expected behavior
As the timeout is None, blocking indefinitely until the transmit queue is ready, as specified in the BusABC.send() docs.
Additional context
OS and version: Ubuntu 24.04.3 LTS, 6.14.0-35-generic
Python version: Python 3.12.3
python-can version: 4.3.1
python-can interface/s (if applicable): socketcan, F81601 interface (PCI), Manufacturer provided driver
- Linguagem predominante
- Python
- Estrelas
- 1.6k
- Forks
- 700
- Métricas de merge de PRs
- Nenhum PR com merge em 30d
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de hardbyte/python-can
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 88/100
hardbyte/python-can#2103 ·
-
Unhashable type for Systec interface errorsTalvez já em andamento @giri256 assumiu há 70 dias. Abertabug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 78/100
hardbyte/python-can#2077 · 1 comentário · 1 reação ·
-
bug
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 68/100
hardbyte/python-can#1922 · 1 reação ·
-
enhancement
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 75/100
hardbyte/python-can#2104 ·
-
enhancement
Dificuldade 5/5 Mais de uma semana Facilidade para iniciantes 30/100
hardbyte/python-can#2102 ·
Todas as issues de hardbyte/python-can
Issues semelhantes
-
needs triage
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 76/100
Mantenedores costumam responder em até 1 dia
-
json_params_matcher fails on falsy top-level JSON primitives (0, False, "")Talvez já em andamento @mayureshsonawane17 assumiu hoje. AbertaWaiting for: Product Owner
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
Mantenedores costumam responder em até 5 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 75/100
Mantenedores costumam responder em até 1 dia
-
Add .devin pluginAberta
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 88/100
ayghri/i-have-adhd#249 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
modelscope/FunASR#3762 ·
Mantenedores costumam responder em até 1 dia