+++ /dev/null
-Index: src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c
-===================================================================
---- src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c (revision 745)
-+++ src/ozmod/ozmod_wanpipe/ozmod_wanpipe.c (working copy)
-@@ -98,19 +98,21 @@
- * so we can have one analong handler thread that will deal with all the idle analog channels for events
- * the alternative would be for the driver to provide one socket for all of the oob events for all analog channels
- */
--static __inline__ int tdmv_api_wait_socket(sng_fd_t fd, int timeout, int *flags)
-+static __inline__ int tdmv_api_wait_socket(zap_channel_t *zchan, int timeout, int *flags)
- {
-
- #ifdef LIBSANGOMA_VERSION
- int err;
-- sangoma_wait_obj_t sangoma_wait_obj;
-+ sangoma_wait_obj_t *sangoma_wait_obj = zchan->mod_data;
-
-- sangoma_init_wait_obj(&sangoma_wait_obj, fd, 1, 1, *flags, SANGOMA_WAIT_OBJ);
-+ sangoma_init_wait_obj(sangoma_wait_obj, zchan->sockfd, 1, 1, 0, SANGOMA_WAIT_OBJ);
-
-- err=sangoma_socket_waitfor_many(&sangoma_wait_obj,1 , timeout);
-+ err = sangoma_socket_waitfor_many(&sangoma_wait_obj, 1, timeout);
-+
- if (err > 0) {
-- *flags=sangoma_wait_obj.flags_out;
-+ *flags = sangoma_wait_obj.flags_out;
- }
-+
- return err;
-
- #else
-@@ -118,7 +120,7 @@
- int res;
-
- memset(&pfds[0], 0, sizeof(pfds[0]));
-- pfds[0].fd = fd;
-+ pfds[0].fd = zchan->sockfd;
- pfds[0].events = *flags;
- res = poll(pfds, 1, timeout);
- *flags = 0;
-@@ -200,6 +202,15 @@
-
- if (sockfd != WP_INVALID_SOCKET && zap_span_add_channel(span, sockfd, type, &chan) == ZAP_SUCCESS) {
- wanpipe_tdm_api_t tdm_api;
-+#ifdef LIBSANGOMA_VERSION
-+ sangoma_wait_obj_t *sangoma_wait_obj;
-+
-+ sangoma_wait_obj = malloc(sizeof(*sangoma_wait_obj));
-+ memset(sangoma_wait_obj, 0, sizeof(*sangoma_wait_obj));
-+ sangoma_init_wait_obj(sangoma_wait_obj, sockfd, 1, 1, 0, SANGOMA_WAIT_OBJ);
-+ chan->mod_data = sangoma_wait_obj;
-+#endif
-+
- memset(&tdm_api,0,sizeof(tdm_api));
-
- chan->physical_span_id = spanno;
-@@ -211,7 +222,7 @@
-
- dtmf = "software";
-
-- /* FIXME: Handle Error Conditino Check for return code */
-+ /* FIXME: Handle Error Condition Check for return code */
- err= sangoma_tdm_get_hw_coding(chan->sockfd, &tdm_api);
-
- if (tdm_api.wp_tdm_cmd.hw_tdm_coding) {
-@@ -606,7 +617,7 @@
- inflags |= POLLPRI;
- }
-
-- result = tdmv_api_wait_socket(zchan->sockfd, to, &inflags);
-+ result = tdmv_api_wait_socket(zchan, to, &inflags);
-
- *flags = ZAP_NO_FLAGS;
-
-@@ -643,26 +654,30 @@
- ZIO_SPAN_POLL_EVENT_FUNCTION(wanpipe_poll_event)
- {
- #ifdef LIBSANGOMA_VERSION
-- sangoma_wait_obj_t pfds[ZAP_MAX_CHANNELS_SPAN];
-+ sangoma_wait_obj_t *pfds[ZAP_MAX_CHANNELS_SPAN] = { 0 };
- #else
- struct pollfd pfds[ZAP_MAX_CHANNELS_SPAN];
- #endif
-
- uint32_t i, j = 0, k = 0, l = 0;
-- int objects=0;
- int r;
-
- for(i = 1; i <= span->chan_count; i++) {
- zap_channel_t *zchan = span->channels[i];
-
-+
- #ifdef LIBSANGOMA_VERSION
-- sangoma_init_wait_obj(&pfds[j], zchan->sockfd , 1, 1, POLLPRI, SANGOMA_WAIT_OBJ);
-+ if (!zchan->mod_data) {
-+ continue;
-+ }
-+ pfds[j] = zchan->mod_data;
-+
- #else
- memset(&pfds[j], 0, sizeof(pfds[j]));
- pfds[j].fd = span->channels[i]->sockfd;
- pfds[j].events = POLLPRI;
- #endif
-- objects++;
-+
- /* The driver probably should be able to do this wink/flash/ringing by itself this is sort of a hack to make it work! */
-
- if (zap_test_flag(zchan, ZAP_CHANNEL_WINK) || zap_test_flag(zchan, ZAP_CHANNEL_FLASH)) {
-@@ -703,7 +718,7 @@
- ms = l;
- }
- #ifdef LIBSANGOMA_VERSION
-- r = sangoma_socket_waitfor_many(pfds,objects,ms);
-+ r = sangoma_socket_waitfor_many(pfds, j, ms);
- #else
- r = poll(pfds, j, ms);
- #endif
-@@ -935,6 +950,15 @@
- */
- static ZIO_CHANNEL_DESTROY_FUNCTION(wanpipe_channel_destroy)
- {
-+ sangoma_wait_obj_t *sangoma_wait_obj;
-+
-+ if (zchan->mod_data) {
-+ sangoma_wait_obj = zchan->mod_data;
-+ zchan->mod_data = NULL;
-+ sangoma_release_wait_obj(sangoma_wait_obj);
-+ free(sangoma_wait_obj);
-+ }
-+
- if (zchan->sockfd > -1) {
- close(zchan->sockfd);
- zchan->sockfd = WP_INVALID_SOCKET;