r11283: Move to using sival_int from sival_ptr. Part of bug #2922.
authorJeremy Allison <jra@samba.org>
Tue, 25 Oct 2005 05:26:53 +0000 (05:26 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 16:05:10 +0000 (11:05 -0500)
Jeremy.
(This used to be commit f68ff32630ee3b06b69bac59674ecc1496880a47)

source3/smbd/aio.c

index af1f172b9244d76788051c0c147aa0ae3c0508a3..c71c3740433b23282afd88c2b034729ff6f2abd8 100644 (file)
@@ -155,7 +155,7 @@ static uint16 aio_pending_array[AIO_PENDING_SIZE];
 static void signal_handler(int sig, siginfo_t *info, void *unused)
 {
        if (signals_received < AIO_PENDING_SIZE - 1) {
-               aio_pending_array[signals_received] = *(uint16 *)(info->si_value.sival_ptr);
+               aio_pending_array[signals_received] = info->si_value.sival_int;
                signals_received++;
        } /* Else signal is lost. */
        sys_select_signal(RT_SIGNAL_AIO);
@@ -248,7 +248,7 @@ BOOL schedule_aio_read_and_X(connection_struct *conn,
        a->aio_offset = startpos;
        a->aio_sigevent.sigev_notify = SIGEV_SIGNAL;
        a->aio_sigevent.sigev_signo  = RT_SIGNAL_AIO;
-       a->aio_sigevent.sigev_value.sival_ptr = (void *)&aio_ex->mid;
+       a->aio_sigevent.sigev_value.sival_int = aio_ex->mid;
 
        if (SMB_VFS_AIO_READ(fsp,a) == -1) {
                DEBUG(0,("schedule_aio_read_and_X: aio_read failed. Error %s\n",
@@ -327,7 +327,7 @@ BOOL schedule_aio_write_and_X(connection_struct *conn,
        a->aio_offset = startpos;
        a->aio_sigevent.sigev_notify = SIGEV_SIGNAL;
        a->aio_sigevent.sigev_signo  = RT_SIGNAL_AIO;
-       a->aio_sigevent.sigev_value.sival_ptr = (void *)&aio_ex->mid;
+       a->aio_sigevent.sigev_value.sival_int = aio_ex->mid;
 
        if (SMB_VFS_AIO_WRITE(fsp,a) == -1) {
                DEBUG(3,("schedule_aio_wrote_and_X: aio_write failed. Error %s\n",
@@ -642,10 +642,16 @@ BOOL wait_for_aio_completion(files_struct *fsp)
 
                /* One or more events might have completed - process them if so. */
                for( i = 0; i < aio_completion_count; i++) {
-                       uint16 mid = *(uint16 *)aiocb_list[i]->aio_sigevent.sigev_value.sival_ptr;
+                       uint16 mid = aiocb_list[i]->aio_sigevent.sigev_value.sival_int;
 
                        aio_ex = find_aio_ex(mid);
 
+                       if (!aio_ex) {
+                               DEBUG(0, ("wait_for_aio_completion: mid %u doesn't match an aio record\n",
+                                       (unsigned int)mid ));
+                               continue;
+                       }
+
                        if (!handle_aio_completed(aio_ex, &err)) {
                                continue;
                        }