summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar ddennedy 2006-04-09 01:26:41 +0000
committerGravatar ddennedy 2006-04-09 01:26:41 +0000
commit9c74e4a2956e38045b825e43e1a4b7ba1620dfc2 (patch)
tree69a8a9a41c2f494f941584f6536b4f1269e06fe5
parentAdded a new callback response for iso_xmit handlers: RAW1394_ISO_AGAIN. (diff)
remove memory allocations for isochronous operations from the libraw1394 event loop to make them more respectful of realtime applications
git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@162 53a565d1-3bb7-0310-b661-cf11e63c67ab
-rw-r--r--src/iso.c24
-rw-r--r--src/raw1394_private.h3
2 files changed, 19 insertions, 8 deletions
diff --git a/src/iso.c b/src/iso.c
index 0d5aa9f..35fecb7 100644
--- a/src/iso.c
+++ b/src/iso.c
@@ -152,7 +152,15 @@ static int do_iso_init(raw1394handle_t handle,
handle->iso_state = ISO_STOP;
- return 0;
+ handle->iso_packet_infos = malloc(buf_packets * sizeof(struct raw1394_iso_packet_info));
+ if(handle->iso_packet_infos == NULL) {
+ munmap(handle->iso_buffer, handle->iso_status.config.data_buf_size);
+ handle->iso_buffer = NULL;
+ ioctl(handle->fd, RAW1394_IOC_ISO_SHUTDOWN, 0);
+ return -1;
+ }
+
+ return 0;
}
int raw1394_iso_xmit_init(raw1394handle_t handle,
@@ -287,7 +295,7 @@ static int _raw1394_iso_xmit_queue_packets(raw1394handle_t handle)
/* we could potentially send up to stat->n_packets packets */
packets.n_packets = 0;
- packets.infos = malloc(stat->n_packets * sizeof(struct raw1394_iso_packet_info));
+ packets.infos = handle->iso_packet_infos;
if(packets.infos == NULL)
goto out;
@@ -347,7 +355,6 @@ out_produce:
if(ioctl(handle->fd, RAW1394_IOC_ISO_XMIT_PACKETS, &packets))
retval = -1;
}
- free(packets.infos);
out:
if(stop_sync) {
if(raw1394_iso_xmit_sync(handle))
@@ -456,6 +463,11 @@ void raw1394_iso_shutdown(raw1394handle_t handle)
ioctl(handle->fd, RAW1394_IOC_ISO_SHUTDOWN, 0);
}
+ if(handle->iso_packet_infos) {
+ free(handle->iso_packet_infos);
+ handle->iso_packet_infos = NULL;
+ }
+
handle->iso_mode = ISO_INACTIVE;
}
@@ -473,12 +485,12 @@ static int _raw1394_iso_recv_packets(raw1394handle_t handle)
/* ask the kernel to fill an array with packet info structs */
packets.n_packets = stat->n_packets;
- packets.infos = malloc(packets.n_packets * sizeof(struct raw1394_iso_packet_info));
+ packets.infos = handle->iso_packet_infos;
if(packets.infos == NULL)
goto out;
if(ioctl(handle->fd, RAW1394_IOC_ISO_RECV_PACKETS, &packets) < 0)
- goto out_free;
+ goto out;
while(stat->n_packets > 0) {
struct raw1394_iso_packet_info *info;
@@ -519,8 +531,6 @@ out_consume:
if(ioctl(handle->fd, RAW1394_IOC_ISO_RECV_RELEASE_PACKETS, packets_done))
retval = -1;
}
-out_free:
- free(packets.infos);
out:
return retval;
}
diff --git a/src/raw1394_private.h b/src/raw1394_private.h
index 27683f8..8eb2c76 100644
--- a/src/raw1394_private.h
+++ b/src/raw1394_private.h
@@ -43,7 +43,8 @@ struct raw1394_handle {
raw1394_iso_xmit_handler_t iso_xmit_handler;
raw1394_iso_recv_handler_t iso_recv_handler;
- quadlet_t buffer[HBUF_SIZE/4]; /* 2048 */
+ quadlet_t buffer[HBUF_SIZE/4]; /* 2048 */
+ void *iso_packet_infos; /* actually a struct raw1394_iso_packet_info* */
};
struct sync_cb_data {
-1/+38 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@40 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-13Fix raw1394_start_iso_write() which uses wrong variable.Gravatar aeb 1-1/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@39 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-10Work around compiler warnings for int/ptr casts.Gravatar aeb 6-10/+20 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@38 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-10Added control files for Debian packages.Gravatar aeb 6-8/+106 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@37 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-09-01Added missing prototypes for iso send functions.Gravatar aeb 1-0/+7 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@36 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-08-08Added raw1394_get_irm_id().Gravatar aeb 7-7/+39 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@35 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-08-06Added support for isochronous sending.Gravatar aeb 3-0/+35 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@34 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-07-05Added raw1394_reset_bus() call.Gravatar aeb 4-0/+23 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@33 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-22- Set library version info in configure.in, use in src/Makefile.am.Gravatar aeb 4-2/+16 - Enable compiler warnings. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@32 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-15Update libtool version number.Gravatar aeb 2-2/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@31 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-14Added copyright headers.Gravatar aeb 6-0/+54 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@30 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-11Added explicit AC_PROG_INSTALL call.Gravatar aeb 1-0/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@29 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-09Fix size of error field.Gravatar aeb 1-2/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@28 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-06-02Modified support for 32/64 bit environments, control struct fields have ↵Gravatar aeb 7-43/+28 fixed size now. git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@27 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-05-28Added support for environments with 64 bit kernel and 32 bit userland.Gravatar aeb 8-7/+45 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@26 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-27Fixed missing setting of ext code in raw1394_start_lock()Gravatar aeb 1-0/+1 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@25 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-15Fixed lock transaction to actually return response value.Gravatar aeb 3-5/+11 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@24 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-12Add userdata functions as news.Gravatar aeb 1-0/+4 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@23 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-04-05Add userdata functions.Gravatar aeb 3-0/+18 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@22 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-03-18Bump version number to 0.6.Gravatar aeb 3-5/+6 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@21 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-03-18Mention byte order change.Gravatar aeb 1-0/+2 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@20 53a565d1-3bb7-0310-b661-cf11e63c67ab 2000-03-18Mention SourceForge home.Gravatar aeb 1-1/+5 git-svn-id: svn://svn.linux1394.org/libraw1394/trunk@19 53a565d1-3bb7-0310-b661-cf11e63c67ab