Непредсказуемое поведение при загрузке больших (~4 МБ) файлов на веб-сервер boa

Я разрабатываю приложение для встроенной платформы, а именно DM385 от TI, работающей под управлением arago linux.

Я столкнулся со странной проблемой при загрузке файлов размером более 3-4 МБ через http.

Иногда загрузка работает хорошо, в других случаях файл загружается, но данные повреждаются из-за заголовка HTTP, появляющегося в середине двоичных данных файла.

В других случаях я получаю ошибку glibc() (malloc или free) или SIGSEGV, и происходит сбой boa.

При использовании небольших файлов, таких как 1 МБ или меньше, все работает хорошо. Я попытался отладить проблему, добавив различные распечатки отладки по всему потоку программы. Это, в свою очередь, действительно замедлило работу сервера и временно решило проблему - загрузка файла работала хорошо каждый раз.

Похоже, что в одном из файловых дескрипторов, используемых во время передачи данных, происходит какое-то переполнение буфера, но я не могу указать пальцем на что-то конкретное.

Может ли кто-нибудь поделиться знаниями по этому вопросу или схожими?

[обновлено из комментария:]

Предупреждения во время сборки:

boa.c: In function 'main':
boa.c:290: warning: passing argument 4 of 'pthread_create' makes pointer from integer without a cast
boa.c:292: warning: implicit declaration of function 'onvif_dbg'
boa.c: In function 'create_server_socket_udp_hello':
boa.c:376: warning: unused variable 'one'
boa.c: At top level:
boa.c:374: warning: 'create_server_socket_udp_hello' defined but not used
buffer.c: In function 'req_flush':
buffer.c:219: warning: implicit declaration of function 'onvif_dbg'
cgi.c: In function 'uri_decoding':
cgi.c:329: warning: pointer targets in passing argument 1 of 'ascii_to_hex' differ in signedness
config.c: In function 'read_config_files':
config.c:294: warning: implicit declaration of function 'onvif_trace'
request.c: In function 'uri_mpeg4':
request.c:3327: warning: implicit declaration of function 'onvif_dbg'
request.c: In function 'process_requests':
request.c:4730: warning: suggest parentheses around assignment used as truth value
request.c: At top level:
request.c:49: warning: 'sts' defined but not used
In file included from response.c:26:
/home/user/IPNC_RDK/Source/ipnc_rdk/../ipnc_rdk/ipnc_app/interface/inc/system_default.h:16:1: warning: "IPNC_DM385" redefined
<command-line>: warning: this is the location of the previous definition
In file included from select.c:27:
onvif.h:33:12: warning: missing whitespace after the macro name
select.c: In function 'probe_thr':
select.c:46: warning: implicit declaration of function 'GetSysInfo'
select.c:46: warning: initialization makes pointer from integer without a cast
select.c:51: warning: control reaches end of non-void function
select.c: In function 'select_loop':
select.c:66: warning: implicit declaration of function 'pthread_create'
select.c:68: warning: implicit declaration of function 'onvif_dbg'

1 ответ

Лучше всего было бы исправить все предупреждения.

Однако (комментарии относятся к предупреждению над ними):

boa.c: In function 'main':
boa.c:290: warning: passing argument 4 of 'pthread_create' makes pointer from integer without a cast

Осмотрите этот, это может быть смертельным.

boa.c:292: warning: implicit declaration of function 'onvif_dbg'

Почини это.

boa.c: In function 'create_server_socket_udp_hello':
boa.c:376: warning: unused variable 'one'

Не красиво, но безобидно.

boa.c: At top level:
boa.c:374: warning: 'create_server_socket_udp_hello' defined but not used

Не красиво, но безобидно.

buffer.c: In function 'req_flush':
buffer.c:219: warning: implicit declaration of function 'onvif_dbg'

Почини это.

cgi.c: In function 'uri_decoding':
cgi.c:329: warning: pointer targets in passing argument 1 of 'ascii_to_hex' differ in signedness

Осмотрите этот, это может быть смертельным.

config.c: In function 'read_config_files':
config.c:294: warning: implicit declaration of function 'onvif_trace'

Почини это.

request.c: In function 'uri_mpeg4':
request.c:3327: warning: implicit declaration of function 'onvif_dbg'

Почини это.

request.c: In function 'process_requests':
request.c:4730: warning: suggest parentheses around assignment used as truth value

Осмотрите этот, это может быть смертельным.

request.c: At top level:
request.c:49: warning: 'sts' defined but not used

Не красиво, но безобидно.

In file included from response.c:26:
/home/user/IPNC_RDK/Source/ipnc_rdk/../ipnc_rdk/ipnc_app/interface/inc/system_default.h:16:1: warning: "IPNC_DM385" redefined
<command-line>: warning: this is the location of the previous definition
In file included from select.c:27:

Осмотрите этот, это может быть смертельным.

onvif.h:33:12: warning: missing whitespace after the macro name

Осмотрите этот, это может быть смертельным.

select.c: In function 'probe_thr':
select.c:46: warning: implicit declaration of function 'GetSysInfo'

Почини это.

select.c:46: warning: initialization makes pointer from integer without a cast

Почини это.

select.c:51: warning: control reaches end of non-void function

Почини это.

select.c: In function 'select_loop':
select.c:66: warning: implicit declaration of function 'pthread_create'

Почини это.

select.c:68: warning: implicit declaration of function 'onvif_dbg'

Почини это.

Другие вопросы по тегам