Touchscreen_init calls the open function of hal at the begining of the boot with the call stack below.
So, the open function of hal is never called at the same time in multi-thread.
Therefore, we can use safely readdir in deviced.
0 touchscreen_init
1 0x2a00b02c in devices_init (data=0x0) at /usr/src/debug/deviced-2.0.0/src/core/devices.c:102
2 0x2a00e424 in deviced_main (argc=<optimized out>, argv=<optimized out>) at /usr/src/debug/deviced-2.0.0/src/core/main.c:93
3 0x2a0078f4 in main (argc=1, argv=0xbefffe64) at /usr/src/debug/deviced-2.0.0/src/core/main.c:123
Change-Id: Iee6fcde249df15a73723d7ae1ffce7c68c93b9ad
Signed-off-by: lokilee73 <changjoo.lee@samsung.com>
(cherry picked from commit
042bfd00d4596e55e59ff8d7d1ab1896b07ee91a)
static int touchscreen_probe(void)
{
DIR *d;
- struct dirent entry;
struct dirent *dir;
char buf[PATH_MAX];
int val, ret = -ENOTSUP;
if (!d)
return -ENOTSUP;
- while (readdir_r(d, &entry, &dir) == 0 && dir != NULL) {
+ while ((dir = readdir(d))) {
if (dir->d_name[0] == '.')
continue;
snprintf(buf, sizeof(buf), "%s%s%s", INPUT_PATH,
if (!gadget)
return;
- if (gadget->strs) {
+ if (gadget->strs) {
for (i = 0; gadget->strs[i].lang_code; ++i) {
free(gadget->strs[i].manufacturer);
free(gadget->strs[i].product);