adb: split up reads longer than 16k.
Reads from functionfs allocate contiguous buffers in the kernel, causing long ones to sometimes fail because of memory fragmentation. Bug: http://b/26206622 Change-Id: Id40753d6f29b37b5ca97c3e2fa3921f52b4242de
This commit is contained in:
parent
f8d892c84a
commit
0b19540dee
|
@ -481,7 +481,8 @@ static int usb_ffs_read(usb_handle* h, void* data, int len) {
|
|||
|
||||
char* buf = static_cast<char*>(data);
|
||||
while (len > 0) {
|
||||
int n = adb_read(h->bulk_out, buf, len);
|
||||
int read_len = (len > 16384) ? 16384 : len;
|
||||
int n = adb_read(h->bulk_out, buf, read_len);
|
||||
if (n < 0) {
|
||||
D("ERROR: fd = %d, n = %d: %s", h->bulk_out, n, strerror(errno));
|
||||
return -1;
|
||||
|
|
Loading…
Reference in New Issue