summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Peter Hurley 2010-10-27 09:29:48 -0400
committerGravatar Stefan Richter 2012-02-05 11:18:40 +0100
commitc6569f39f17af1b05a8a9806d794343a65a0f267 (patch)
tree3084a21289d52d675823d43cb329caf36a60d4ab
parentReset device fd upon error condition in handle_inotify() (diff)
Process multiple inotify events
If multiple inotify events are presented, process *all* of them. This can happen when several device adds are pushed simultaneously. handle_inotify() was refactored. Signed-off-by: Peter Hurley <phurley@charter.net> Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Diffstat (limited to '')
-rw-r--r--src/fw.c35
1 files changed, 27 insertions, 8 deletions
diff --git a/src/fw.c b/src/fw.c
index 2d8a292..558767c 100644
--- a/src/fw.c
+++ b/src/fw.c
@@ -360,21 +360,16 @@ handle_device_event(raw1394handle_t handle,
}
static int
-handle_inotify(raw1394handle_t handle, struct epoll_closure *ec,
- __uint32_t events)
+process_inotify_event(fw_handle_t fwhandle, struct inotify_event *event)
{
- fw_handle_t fwhandle = handle->mode.fw;
- struct inotify_event *event;
char filename[32];
struct fw_cdev_get_info info;
struct fw_cdev_event_bus_reset reset;
struct epoll_event ep;
- int i, len, fd, phy_id, fname_str_sz;
+ int i, fd, phy_id, fname_str_sz;
- event = (struct inotify_event *) fwhandle->buffer;
- len = read(fwhandle->inotify_fd, event, BUFFER_SIZE);
if (!(event->mask & IN_CREATE))
- return -1;
+ return 0;
if (!is_fw_device_name(event->name))
return 0;
snprintf(filename, sizeof filename, FW_DEVICE_DIR "/%s", event->name);
@@ -433,6 +428,30 @@ handle_inotify(raw1394handle_t handle, struct epoll_closure *ec,
return 0;
}
+static int
+handle_inotify(raw1394handle_t handle, struct epoll_closure *ec,
+ __uint32_t events)
+{
+ fw_handle_t fwhandle = handle->mode.fw;
+ struct inotify_event *event;
+ int len;
+ int retval = 0;
+
+ event = (struct inotify_event *) fwhandle->buffer;
+ len = read(fwhandle->inotify_fd, event, BUFFER_SIZE);
+
+ while (len >= sizeof(struct inotify_event)) {
+ retval = process_inotify_event(fwhandle, event);
+ if (retval == -1)
+ break;
+ len -= sizeof(struct inotify_event) + event->len;
+ event = (struct inotify_event *) ((char *)event +
+ (sizeof(struct inotify_event) + event->len));
+ }
+
+ return retval;
+}
+
int fw_loop_iterate(raw1394handle_t handle)
{
int i, count, retval = 0;
ons'>+1 2001-01-27Adapted testlibraw to new style error handling.Gravatar aeb 1-17/+18 2001-01-19Fix building errors.c.Gravatar aeb 2-0/+2 2001-01-19First implementation of new error reporting API.Gravatar aeb 7-28/+134 2001-01-04Fix misplaced device file in Debian installation.Gravatar aeb 3-3/+10 2000-12-12Debian scripts use makedev (>=2.3.1-49) in postinst by default now.Gravatar aeb 7-30/+104 2000-11-25Fix postinst ldconfig.Gravatar aeb 2-11/+11 2000-11-25Add some information about return values.Gravatar aeb 1-3/+29 2000-11-24Bump up version numbers for release.Gravatar aeb 2-3/+11 2000-11-24Added libraw1394.postinst.in to list of distributed files.Gravatar aeb 3-3/+35 2000-11-23Add ldconfig in deb postinst for Debian policy conformance.Gravatar aeb 2-2/+17 2000-11-23Removed acconfig.h, which wasn't needed for some time.Gravatar aeb 1-13/+0 2000-11-22Added ieee1394.h header.Gravatar aeb 3-1/+38 2000-09-13Fix raw1394_start_iso_write() which uses wrong variable.Gravatar aeb 1-1/+1 2000-09-10Work around compiler warnings for int/ptr casts.Gravatar aeb 6-10/+20 2000-09-10Added control files for Debian packages.Gravatar aeb 6-8/+106 2000-09-01Added missing prototypes for iso send functions.Gravatar aeb 1-0/+7 2000-08-08Added raw1394_get_irm_id().Gravatar aeb 7-7/+39 2000-08-06Added support for isochronous sending.Gravatar aeb 3-0/+35 2000-07-05Added raw1394_reset_bus() call.Gravatar aeb 4-0/+23 2000-06-22- Set library version info in configure.in, use in src/Makefile.am.Gravatar aeb 4-2/+16 2000-06-15Update libtool version number.Gravatar aeb 2-2/+2 2000-06-14Added copyright headers.Gravatar aeb 6-0/+54 2000-06-11Added explicit AC_PROG_INSTALL call.Gravatar aeb 1-0/+1 2000-06-09Fix size of error field.Gravatar aeb 1-2/+2 2000-06-02Modified support for 32/64 bit environments, control struct fields have fixed...Gravatar aeb 7-43/+28 2000-05-28Added support for environments with 64 bit kernel and 32 bit userland.Gravatar aeb 8-7/+45 2000-04-27Fixed missing setting of ext code in raw1394_start_lock()Gravatar aeb 1-0/+1 2000-04-15Fixed lock transaction to actually return response value.Gravatar aeb 3-5/+11 2000-04-12Add userdata functions as news.Gravatar aeb 1-0/+4 2000-04-05Add userdata functions.Gravatar aeb 3-0/+18 2000-03-18Bump version number to 0.6.Gravatar aeb 3-5/+6 2000-03-18Mention byte order change.Gravatar aeb 1-0/+2 2000-03-18Mention SourceForge home.Gravatar aeb 1-1/+5