All pastes #896033 Raw Edit

Stuff

public text v1 · immutable
#896033 ·published 2008-02-08 08:13 UTC
rendered paste body
Index: apps/tagcache.c
===================================================================
--- apps/tagcache.c	(revision 16244)
+++ apps/tagcache.c	(working copy)
@@ -3030,21 +3030,11 @@
     
     return (next == command_queue_ridx);
 }
-
-void run_command_queue(bool force)
+bool command_queue_sync_callback(void)
 {
+    
     struct master_header myhdr;
     int masterfd;
-    
-    if (COMMAND_QUEUE_IS_EMPTY)
-        return;
-    
-    if (!force && !command_queue_is_full() 
-        && current_tick - TAGCACHE_COMMAND_QUEUE_COMMIT_DELAY 
-           < command_queue_timestamp)
-    {
-        return;
-    }
         
     mutex_lock(&command_queue_mutex);
 	
@@ -3064,7 +3054,7 @@
                 
                 /* Re-open the masterfd. */
                 if ( (masterfd = open_master_fd(&myhdr, true)) < 0)
-                    return;
+                    return true;
                 
                 break;
             }
@@ -3082,8 +3072,30 @@
     close(masterfd);
     
     mutex_unlock(&command_queue_mutex);
+    return true;
 }
 
+void run_command_queue(bool force)
+{
+    if (COMMAND_QUEUE_IS_EMPTY)
+        return;
+    
+    if (!force && !command_queue_is_full() 
+         && current_tick - TAGCACHE_COMMAND_QUEUE_COMMIT_DELAY 
+         < command_queue_timestamp)
+    {
+        return;
+    }
+    else if (force &&
+             (command_queue_ridx != command_queue_widx))
+    {
+        command_queue_sync_callback();
+        return;
+    }
+    if (command_queue_ridx != command_queue_widx)
+        ata_idle_notify(command_queue_sync_callback);
+}
+
 static void queue_command(int cmd, long idx_id, int tag, long data)
 {
     while (1)