# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: kinkie@squid-cache.org-20120804121157-bb7qyx7czd4v1pnk
# target_branch: ../trunk
# testament_sha1: 9f17a91599d4c0b0f1ec41d685bc384582a958de
# timestamp: 2012-08-04 14:19:02 +0200
# base_revision_id: squidadm@squid-cache.org-20120802001245-\
#   wsbtuuvv3tq8ee06
# 
# Begin patch
=== modified file 'src/ClientDelayConfig.cc'
--- src/ClientDelayConfig.cc	2012-07-20 15:31:04 +0000
+++ src/ClientDelayConfig.cc	2012-08-02 21:18:43 +0000
@@ -46,7 +46,7 @@
 void ClientDelayConfig::parsePoolCount()
 {
     if (pools.size()) {
-        debugs(3, 0, "parse_client_delay_pool_count: multiple client_delay_pools lines, aborting all previous client_delay_pools config");
+        debugs(3, DBG_CRITICAL, "parse_client_delay_pool_count: multiple client_delay_pools lines, aborting all previous client_delay_pools config");
         clean();
     }
     unsigned short pools_;
@@ -62,7 +62,7 @@
     ConfigParser::ParseUShort(&pool);
 
     if (pool < 1 || pool > pools.size()) {
-        debugs(3, 0, "parse_client_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << pools.size());
+        debugs(3, DBG_CRITICAL, "parse_client_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << pools.size());
         return;
     }
 
@@ -79,7 +79,7 @@
     ConfigParser::ParseUShort(&pool);
 
     if (pool < 1 || pool > pools.size()) {
-        debugs(3, 0, "parse_client_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << pools.size());
+        debugs(3, DBG_CRITICAL, "parse_client_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << pools.size());
         return;
     }
 

=== modified file 'src/ConfigParser.cc'
--- src/ConfigParser.cc	2012-07-23 07:02:06 +0000
+++ src/ConfigParser.cc	2012-08-02 21:18:43 +0000
@@ -71,7 +71,7 @@
                 *t = '\0';
 
                 if ((wordFile = fopen(fn, "r")) == NULL) {
-                    debugs(28, 0, "strtokFile: " << fn << " not found");
+                    debugs(28, DBG_CRITICAL, "strtokFile: " << fn << " not found");
                     return (NULL);
                 }
 

=== modified file 'src/DelayConfig.cc'
--- src/DelayConfig.cc	2012-07-20 15:31:04 +0000
+++ src/DelayConfig.cc	2012-08-02 21:18:43 +0000
@@ -65,7 +65,7 @@
     ConfigParser::ParseUShort(&pool);
 
     if (pool < 1 || pool > DelayPools::pools()) {
-        debugs(3, 0, "parse_delay_pool_class: Ignoring pool " << pool << " not in 1 .. " << DelayPools::pools());
+        debugs(3, DBG_CRITICAL, "parse_delay_pool_class: Ignoring pool " << pool << " not in 1 .. " << DelayPools::pools());
         return;
     }
 
@@ -73,7 +73,7 @@
     ConfigParser::ParseUShort(&delay_class_);
 
     if (delay_class_ < 1 || delay_class_ > 5) {
-        debugs(3, 0, "parse_delay_pool_class: Ignoring pool " << pool << " class " << delay_class_ << " not in 1 .. 5");
+        debugs(3, DBG_CRITICAL, "parse_delay_pool_class: Ignoring pool " << pool << " class " << delay_class_ << " not in 1 .. 5");
         return;
     }
 
@@ -89,14 +89,14 @@
     ConfigParser::ParseUShort(&pool);
 
     if (pool < 1 || pool > DelayPools::pools()) {
-        debugs(3, 0, "parse_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << DelayPools::pools());
+        debugs(3, DBG_CRITICAL, "parse_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << DelayPools::pools());
         return;
     }
 
     --pool;
 
     if (!DelayPools::delay_data[pool].theComposite().getRaw()) {
-        debugs(3, 0, "parse_delay_pool_rates: Ignoring pool " << pool + 1 << " attempt to set rates with class not set");
+        debugs(3, DBG_CRITICAL, "parse_delay_pool_rates: Ignoring pool " << pool + 1 << " attempt to set rates with class not set");
         return;
     }
 
@@ -111,7 +111,7 @@
     ConfigParser::ParseUShort(&pool);
 
     if (pool < 1 || pool > DelayPools::pools()) {
-        debugs(3, 0, "parse_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << DelayPools::pools());
+        debugs(3, DBG_CRITICAL, "parse_delay_pool_rates: Ignoring pool " << pool << " not in 1 .. " << DelayPools::pools());
         return;
     }
 

=== modified file 'src/DiskIO/AIO/AIODiskFile.cc'
--- src/DiskIO/AIO/AIODiskFile.cc	2012-07-12 09:08:16 +0000
+++ src/DiskIO/AIO/AIODiskFile.cc	2012-08-02 21:10:18 +0000
@@ -127,7 +127,7 @@
     if (slot < 0) {
         /* No free slot? Callback error, and return */
         fatal("Aiee! out of aiocb slots! - FIXME and wrap file_read\n");
-        debugs(79, 1, "WARNING: out of aiocb slots!");
+        debugs(79, DBG_IMPORTANT, "WARNING: out of aiocb slots!");
         /* fall back to blocking method */
         //        file_read(fd, request->buf, request->len, request->offset, callback, data);
         return;
@@ -164,7 +164,7 @@
     /* Initiate aio */
     if (aio_read(&qe->aq_e_aiocb) < 0) {
         fatalf("Aiee! aio_read() returned error (%d)  FIXME and wrap file_read !\n", errno);
-        debugs(79, 1, "WARNING: aio_read() returned error: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "WARNING: aio_read() returned error: " << xstrerror());
         /* fall back to blocking method */
         //        file_read(fd, request->buf, request->len, request->offset, callback, data);
     }
@@ -185,7 +185,7 @@
     if (slot < 0) {
         /* No free slot? Callback error, and return */
         fatal("Aiee! out of aiocb slots FIXME and wrap file_write !\n");
-        debugs(79, 1, "WARNING: out of aiocb slots!");
+        debugs(79, DBG_IMPORTANT, "WARNING: out of aiocb slots!");
         /* fall back to blocking method */
         //        file_write(fd, offset, buf, len, callback, data, freefunc);
         return;
@@ -222,7 +222,7 @@
     /* Initiate aio */
     if (aio_write(&qe->aq_e_aiocb) < 0) {
         fatalf("Aiee! aio_write() returned error (%d) FIXME and wrap file_write !\n", errno);
-        debugs(79, 1, "WARNING: aio_write() returned error: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "WARNING: aio_write() returned error: " << xstrerror());
         /* fall back to blocking method */
         //       file_write(fd, offset, buf, len, callback, data, freefunc);
     }

=== modified file 'src/DiskIO/AIO/AIODiskFile.h'
--- src/DiskIO/AIO/AIODiskFile.h	2010-11-21 04:40:05 +0000
+++ src/DiskIO/AIO/AIODiskFile.h	2012-08-04 12:11:57 +0000
@@ -71,7 +71,6 @@
     virtual bool ioInProgress() const;
 
 private:
-    CBDATA_CLASS(AIODiskFile);
     void error(bool const &);
     int fd;
     String path;
@@ -79,6 +78,7 @@
     RefCount<IORequestor> ioRequestor;
     bool closed;
     bool error_;
+    CBDATA_CLASS(AIODiskFile);
 };
 
 #endif /* USE_DISKIO_AIO */

=== modified file 'src/DiskIO/AIO/aio_win32.cc'
--- src/DiskIO/AIO/aio_win32.cc	2012-07-12 09:08:16 +0000
+++ src/DiskIO/AIO/aio_win32.cc	2012-08-02 21:10:18 +0000
@@ -100,7 +100,7 @@
     /* Test to see if the I/O was queued successfully. */
     if (!IoOperationStatus) {
         errno = GetLastError();
-        debugs(81,1, "aio_read: GetLastError=" << errno  );
+        debugs(81, DBG_IMPORTANT, "aio_read: GetLastError=" << errno  );
         return -1;
     }
 
@@ -152,7 +152,7 @@
     /* Test to see if the I/O was queued successfully. */
     if (!IoOperationStatus) {
         errno = GetLastError();
-        debugs(81, 1, "aio_read: GetLastError=" << errno  );
+        debugs(81, DBG_IMPORTANT, "aio_read: GetLastError=" << errno  );
         return -1;
     }
 
@@ -212,7 +212,7 @@
     /* Test to see if the I/O was queued successfully. */
     if (!IoOperationStatus) {
         errno = GetLastError();
-        debugs(81, 1, "aio_write: GetLastError=" << errno  );
+        debugs(81, DBG_IMPORTANT, "aio_write: GetLastError=" << errno  );
         return -1;
     }
 
@@ -264,7 +264,7 @@
     /* Test to see if the I/O was queued successfully. */
     if (!IoOperationStatus) {
         errno = GetLastError();
-        debugs(81, 1, "aio_write: GetLastError=" << errno  );
+        debugs(81, DBG_IMPORTANT, "aio_write: GetLastError=" << errno  );
         return -1;
     }
 

=== modified file 'src/DiskIO/Blocking/BlockingFile.cc'
--- src/DiskIO/Blocking/BlockingFile.cc	2012-07-12 09:08:16 +0000
+++ src/DiskIO/Blocking/BlockingFile.cc	2012-08-02 21:18:43 +0000
@@ -223,7 +223,7 @@
     writeRequest = NULL;
 
     if (errflag) {
-        debugs(79, 0, "storeUfsWriteDone: got failure (" << errflag << ")");
+        debugs(79, DBG_CRITICAL, "storeUfsWriteDone: got failure (" << errflag << ")");
         doClose();
         ioRequestor->writeCompleted (DISK_ERROR,0, result);
         return;

=== modified file 'src/DiskIO/Blocking/BlockingFile.h'
--- src/DiskIO/Blocking/BlockingFile.h	2009-01-21 03:47:47 +0000
+++ src/DiskIO/Blocking/BlockingFile.h	2012-08-04 12:11:57 +0000
@@ -62,7 +62,6 @@
 private:
     static DRCB ReadDone;
     static DWCB WriteDone;
-    CBDATA_CLASS(BlockingFile);
     int fd;
     bool closed;
     void error (bool const &);
@@ -74,6 +73,7 @@
     void doClose();
     void readDone(int fd, const char *buf, int len, int errflag);
     void writeDone(int fd, int errflag, size_t len);
+    CBDATA_CLASS(BlockingFile);
 };
 
 #endif /* SQUID_BLOCKINGFILE_H */

=== modified file 'src/DiskIO/DiskDaemon/DiskDaemonDiskIOModule.cc'
--- src/DiskIO/DiskDaemon/DiskDaemonDiskIOModule.cc	2012-01-20 18:55:04 +0000
+++ src/DiskIO/DiskDaemon/DiskDaemonDiskIOModule.cc	2012-08-02 21:10:18 +0000
@@ -67,7 +67,7 @@
      * the debug log is configured and we'll get the message on
      * stderr when doing things like 'squid -k reconfigure'
      */
-    debugs(47, 1, "diskd started");
+    debugs(47, DBG_IMPORTANT, "diskd started");
 #endif
     initialised = true;
 

=== modified file 'src/DiskIO/DiskDaemon/DiskdFile.cc'
--- src/DiskIO/DiskDaemon/DiskdFile.cc	2012-07-23 15:15:27 +0000
+++ src/DiskIO/DiskDaemon/DiskdFile.cc	2012-08-02 21:10:18 +0000
@@ -140,7 +140,7 @@
         ioCompleted();
         errorOccured = true;
         //        IO->shm.put (shm_offset);
-        debugs(79, 1, "storeDiskdSend CREATE: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "storeDiskdSend CREATE: " << xstrerror());
         notifyClient();
         ioRequestor = NULL;
         return;
@@ -169,7 +169,7 @@
         ioCompleted();
         errorOccured = true;
         //        IO->shm.put (shm_offset);
-        debugs(79, 1, "storeDiskdSend READ: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "storeDiskdSend READ: " << xstrerror());
         notifyClient();
         ioRequestor = NULL;
         return;
@@ -195,7 +195,7 @@
     if (x < 0) {
         ioCompleted();
         errorOccured = true;
-        debugs(79, 1, "storeDiskdSend CLOSE: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "storeDiskdSend CLOSE: " << xstrerror());
         notifyClient();
         ioRequestor = NULL;
         return;
@@ -332,7 +332,7 @@
     if (x < 0) {
         ioCompleted();
         errorOccured = true;
-        debugs(79, 1, "storeDiskdSend WRITE: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "storeDiskdSend WRITE: " << xstrerror());
         //        IO->shm.put (shm_offset);
         notifyClient();
         ioRequestor = NULL;

=== modified file 'src/DiskIO/DiskDaemon/DiskdFile.h'
--- src/DiskIO/DiskDaemon/DiskdFile.h	2009-01-21 03:47:47 +0000
+++ src/DiskIO/DiskDaemon/DiskdFile.h	2012-08-04 12:11:57 +0000
@@ -74,7 +74,6 @@
     bool errorOccured;
     DiskdIOStrategy *IO;
     RefCount<IORequestor> ioRequestor;
-    CBDATA_CLASS(DiskdFile);
     void openDone(diomsg *);
     void createDone (diomsg *);
     void readDone (diomsg *);
@@ -86,6 +85,7 @@
     void ioAway();
     void ioCompleted();
     size_t inProgressIOs;
+    CBDATA_CLASS(DiskdFile);
 };
 
 #endif

=== modified file 'src/DiskIO/DiskDaemon/DiskdIOStrategy.cc'
--- src/DiskIO/DiskDaemon/DiskdIOStrategy.cc	2012-07-12 09:08:16 +0000
+++ src/DiskIO/DiskDaemon/DiskdIOStrategy.cc	2012-08-02 21:18:43 +0000
@@ -146,7 +146,7 @@
              shm_offset);
 
     if (x < 0) {
-        debugs(79, 1, "storeDiskdSend UNLINK: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "storeDiskdSend UNLINK: " << xstrerror());
         ::unlink(buf);		/* XXX EWW! */
         //        shm.put (shm_offset);
     }
@@ -172,14 +172,14 @@
     smsgid = msgget((key_t) ikey, 0700 | IPC_CREAT);
 
     if (smsgid < 0) {
-        debugs(50, 0, "storeDiskdInit: msgget: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "storeDiskdInit: msgget: " << xstrerror());
         fatal("msgget failed");
     }
 
     rmsgid = msgget((key_t) (ikey + 1), 0700 | IPC_CREAT);
 
     if (rmsgid < 0) {
-        debugs(50, 0, "storeDiskdInit: msgget: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "storeDiskdInit: msgget: " << xstrerror());
         fatal("msgget failed");
     }
 
@@ -270,14 +270,14 @@
                 nbufs * SHMBUF_BLKSZ, 0600 | IPC_CREAT);
 
     if (id < 0) {
-        debugs(50, 0, "storeDiskdInit: shmget: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "storeDiskdInit: shmget: " << xstrerror());
         fatal("shmget failed");
     }
 
     buf = (char *)shmat(id, NULL, 0);
 
     if (buf == (void *) -1) {
-        debugs(50, 0, "storeDiskdInit: shmat: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "storeDiskdInit: shmat: " << xstrerror());
         fatal("shmat failed");
     }
 
@@ -393,7 +393,7 @@
     M->seq_no = ++seq_no;
 
     if (M->seq_no < last_seq_no)
-        debugs(79, 1, "WARNING: sequencing out of order");
+        debugs(79, DBG_IMPORTANT, "WARNING: sequencing out of order");
 
     x = msgsnd(smsgid, M, diomsg::msg_snd_rcv_sz, IPC_NOWAIT);
 
@@ -403,7 +403,7 @@
         ++diskd_stats.sent_count;
         ++away;
     } else {
-        debugs(79, 1, "storeDiskdSend: msgsnd: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "storeDiskdSend: msgsnd: " << xstrerror());
         cbdataReferenceDone(M->callback_data);
         assert(++send_errors < 100);
         if (shm_offset > -1)
@@ -466,13 +466,13 @@
         * will cause an assertion in storeDiskdShmGet().
         */
         /* TODO: have DiskdIO hold a link to the swapdir, to allow detailed reporting again */
-        debugs(3, 1, "WARNING: cannot increase cache_dir Q1 value while Squid is running.");
+        debugs(3, DBG_IMPORTANT, "WARNING: cannot increase cache_dir Q1 value while Squid is running.");
         magic1 = old_magic1;
         return true;
     }
 
     if (old_magic1 != magic1)
-        debugs(3, 1, "cache_dir new Q1 value '" << magic1 << "'");
+        debugs(3, DBG_IMPORTANT, "cache_dir new Q1 value '" << magic1 << "'");
 
     return true;
 }
@@ -498,13 +498,13 @@
 
     if (old_magic2 < magic2) {
         /* See comments in Q1 function above */
-        debugs(3, 1, "WARNING: cannot increase cache_dir Q2 value while Squid is running.");
+        debugs(3, DBG_IMPORTANT, "WARNING: cannot increase cache_dir Q2 value while Squid is running.");
         magic2 = old_magic2;
         return true;
     }
 
     if (old_magic2 != magic2)
-        debugs(3, 1, "cache_dir new Q2 value '" << magic2 << "'");
+        debugs(3, DBG_IMPORTANT, "cache_dir new Q2 value '" << magic2 << "'");
 
     return true;
 }
@@ -526,7 +526,7 @@
 
     while (away > 0) {
         if (squid_curtime > lastmsg) {
-            debugs(47, 1, "storeDiskdDirSync: " << away << " messages away");
+            debugs(47, DBG_IMPORTANT, "storeDiskdDirSync: " << away << " messages away");
             lastmsg = squid_curtime;
         }
 
@@ -570,7 +570,7 @@
         if (x < 0)
             break;
         else if (x != diomsg::msg_snd_rcv_sz) {
-            debugs(47, 1, "storeDiskdDirCallback: msgget returns " << x);
+            debugs(47, DBG_IMPORTANT, "storeDiskdDirCallback: msgget returns " << x);
             break;
         }
 

=== modified file 'src/DiskIO/DiskThreads/DiskThreadsDiskFile.cc'
--- src/DiskIO/DiskThreads/DiskThreadsDiskFile.cc	2012-07-20 15:31:04 +0000
+++ src/DiskIO/DiskThreads/DiskThreadsDiskFile.cc	2012-08-02 21:18:43 +0000
@@ -185,8 +185,8 @@
 
     if (errflag || fd < 0) {
         errno = errflag;
-        debugs(79, 0, "DiskThreadsDiskFile::openDone: " << xstrerror());
-        debugs(79, 1, "\t" << path_);
+        debugs(79, DBG_CRITICAL, "DiskThreadsDiskFile::openDone: " << xstrerror());
+        debugs(79, DBG_IMPORTANT, "\t" << path_);
         errorOccured = true;
     } else {
         ++store_open_disk_fd;
@@ -231,7 +231,7 @@
         ioRequestor->closeCompleted();
         return;
     } else {
-        debugs(79,0,HERE << "DiskThreadsDiskFile::close: " <<
+        debugs(79, DBG_CRITICAL, HERE << "DiskThreadsDiskFile::close: " <<
                "did NOT close because ioInProgress() is true.  now what?");
     }
 }

=== modified file 'src/DiskIO/DiskThreads/DiskThreadsDiskFile.h'
--- src/DiskIO/DiskThreads/DiskThreadsDiskFile.h	2009-01-21 03:47:47 +0000
+++ src/DiskIO/DiskThreads/DiskThreadsDiskFile.h	2012-08-04 12:11:57 +0000
@@ -83,11 +83,12 @@
     static AIOCB OpenDone;
     void openDone(int fd, const char *buf, int aio_return, int aio_errno);
     RefCount<IORequestor> ioRequestor;
-    CBDATA_CLASS(DiskThreadsDiskFile);
     void doClose();
 
     void readDone(int fd, const char *buf, int len, int errflag, RefCount<ReadRequest> request);
     void writeDone(int fd, int errflag, size_t len, RefCount<WriteRequest> request);
+private:
+    CBDATA_CLASS(DiskThreadsDiskFile);
 };
 
 #include "DiskIO/ReadRequest.h"

=== modified file 'src/DiskIO/DiskThreads/aiops.cc'
--- src/DiskIO/DiskThreads/aiops.cc	2012-07-12 09:08:16 +0000
+++ src/DiskIO/DiskThreads/aiops.cc	2012-08-02 21:18:43 +0000
@@ -527,7 +527,7 @@
         if (++filter >= filter_limit) {
             filter_limit += filter;
             filter = 0;
-            debugs(43, 1, "squidaio_queue_request: WARNING - Queue congestion");
+            debugs(43, DBG_IMPORTANT, "squidaio_queue_request: WARNING - Queue congestion");
         }
     }
 
@@ -550,10 +550,10 @@
 
         if (squid_curtime >= (last_warn + 15) &&
                 squid_curtime >= (high_start + 5)) {
-            debugs(43, 1, "squidaio_queue_request: WARNING - Disk I/O overloading");
+            debugs(43, DBG_IMPORTANT, "squidaio_queue_request: WARNING - Disk I/O overloading");
 
             if (squid_curtime >= (high_start + 15))
-                debugs(43, 1, "squidaio_queue_request: Queue Length: current=" <<
+                debugs(43, DBG_IMPORTANT, "squidaio_queue_request: Queue Length: current=" <<
                        request_queue_len << ", high=" << queue_high <<
                        ", low=" << queue_low << ", duration=" <<
                        (long int) (squid_curtime - high_start));
@@ -566,10 +566,10 @@
 
     /* Warn if seriously overloaded */
     if (request_queue_len > RIDICULOUS_LENGTH) {
-        debugs(43, 0, "squidaio_queue_request: Async request queue growing uncontrollably!");
-        debugs(43, 0, "squidaio_queue_request: Syncing pending I/O operations.. (blocking)");
+        debugs(43, DBG_CRITICAL, "squidaio_queue_request: Async request queue growing uncontrollably!");
+        debugs(43, DBG_CRITICAL, "squidaio_queue_request: Syncing pending I/O operations.. (blocking)");
         squidaio_sync();
-        debugs(43, 0, "squidaio_queue_request: Synced");
+        debugs(43, DBG_CRITICAL, "squidaio_queue_request: Synced");
     }
 }				/* squidaio_queue_request */
 

=== modified file 'src/DiskIO/DiskThreads/aiops_win32.cc'
--- src/DiskIO/DiskThreads/aiops_win32.cc	2012-07-12 09:08:16 +0000
+++ src/DiskIO/DiskThreads/aiops_win32.cc	2012-08-02 21:18:43 +0000
@@ -612,7 +612,7 @@
         if (++filter >= filter_limit) {
             filter_limit += filter;
             filter = 0;
-            debugs(43, 1, "squidaio_queue_request: WARNING - Queue congestion");
+            debugs(43, DBG_IMPORTANT, "squidaio_queue_request: WARNING - Queue congestion");
         }
     }
 
@@ -635,10 +635,10 @@
 
         if (squid_curtime >= (last_warn + 15) &&
                 squid_curtime >= (high_start + 5)) {
-            debugs(43, 1, "squidaio_queue_request: WARNING - Disk I/O overloading");
+            debugs(43, DBG_IMPORTANT, "squidaio_queue_request: WARNING - Disk I/O overloading");
 
             if (squid_curtime >= (high_start + 15))
-                debugs(43, 1, "squidaio_queue_request: Queue Length: current=" <<
+                debugs(43, DBG_IMPORTANT, "squidaio_queue_request: Queue Length: current=" <<
                        request_queue_len << ", high=" << queue_high <<
                        ", low=" << queue_low << ", duration=" <<
                        (long int) (squid_curtime - high_start));
@@ -651,10 +651,10 @@
 
     /* Warn if seriously overloaded */
     if (request_queue_len > RIDICULOUS_LENGTH) {
-        debugs(43, 0, "squidaio_queue_request: Async request queue growing uncontrollably!");
-        debugs(43, 0, "squidaio_queue_request: Syncing pending I/O operations.. (blocking)");
+        debugs(43, DBG_CRITICAL, "squidaio_queue_request: Async request queue growing uncontrollably!");
+        debugs(43, DBG_CRITICAL, "squidaio_queue_request: Syncing pending I/O operations.. (blocking)");
         squidaio_sync();
-        debugs(43, 0, "squidaio_queue_request: Synced");
+        debugs(43, DBG_CRITICAL, "squidaio_queue_request: Synced");
     }
 }				/* squidaio_queue_request */
 
@@ -893,7 +893,7 @@
 squidaio_do_close(squidaio_request_t * requestp)
 {
     if ((requestp->ret = close(requestp->fd)) < 0) {
-        debugs(43, 0, "squidaio_do_close: FD " << requestp->fd << ", errno " << errno);
+        debugs(43, DBG_CRITICAL, "squidaio_do_close: FD " << requestp->fd << ", errno " << errno);
         close(requestp->fd);
     }
 

=== modified file 'src/DiskIO/DiskThreads/async_io.cc'
--- src/DiskIO/DiskThreads/async_io.cc	2012-07-12 09:08:16 +0000
+++ src/DiskIO/DiskThreads/async_io.cc	2012-08-02 21:10:18 +0000
@@ -110,7 +110,7 @@
             AIOCB *callback = ctrlp->done_handler;
             void *cbdata;
             ctrlp->done_handler = NULL;
-            debugs(32, 1, "this be aioCancel. Danger ahead!");
+            debugs(32, DBG_IMPORTANT, "this be aioCancel. Danger ahead!");
 
             if (cbdataReferenceValidDone(ctrlp->done_handler_data, &cbdata))
                 callback(fd, cbdata, NULL, -2, -2);

=== modified file 'src/DiskIO/IpcIo/IpcIoFile.cc'
--- src/DiskIO/IpcIo/IpcIoFile.cc	2012-07-20 15:31:04 +0000
+++ src/DiskIO/IpcIo/IpcIoFile.cc	2012-08-02 21:18:43 +0000
@@ -135,7 +135,7 @@
     Must(diskId < 0); // we do not know our disker yet
 
     if (!response) {
-        debugs(79,1, HERE << "error: timeout");
+        debugs(79, DBG_IMPORTANT, HERE << "error: timeout");
         error_ = true;
     } else {
         diskId = response->strand.kidId;
@@ -145,7 +145,7 @@
             Must(inserted);
         } else {
             error_ = true;
-            debugs(79,1, HERE << "error: no disker claimed " << dbName);
+            debugs(79, DBG_IMPORTANT, HERE << "error: no disker claimed " << dbName);
         }
     }
 
@@ -222,10 +222,10 @@
         ioError = true; // I/O timeout does not warrant setting error_?
     } else {
         if (response->xerrno) {
-            debugs(79,1, HERE << "error: " << xstrerr(response->xerrno));
+            debugs(79, DBG_IMPORTANT, HERE << "error: " << xstrerr(response->xerrno));
             ioError = error_ = true;
         } else if (!response->page) {
-            debugs(79,1, HERE << "error: run out of shared memory pages");
+            debugs(79, DBG_IMPORTANT, HERE << "error: run out of shared memory pages");
             ioError = true;
         } else {
             const char *const buf = Ipc::Mem::PagePointer(response->page);
@@ -268,10 +268,10 @@
         debugs(79, 3, HERE << "error: timeout");
         ioError = true; // I/O timeout does not warrant setting error_?
     } else if (response->xerrno) {
-        debugs(79,1, HERE << "error: " << xstrerr(response->xerrno));
+        debugs(79, DBG_IMPORTANT, HERE << "error: " << xstrerr(response->xerrno));
         ioError = error_ = true;
     } else if (response->len != writeRequest->len) {
-        debugs(79,1, HERE << "problem: " << response->len << " < " << writeRequest->len);
+        debugs(79, DBG_IMPORTANT, HERE << "problem: " << response->len << " < " << writeRequest->len);
         error_ = true;
     }
 
@@ -788,7 +788,7 @@
 IpcIoFile::DiskerHandleRequest(const int workerId, IpcIoMsg &ipcIo)
 {
     if (ipcIo.command != IpcIo::cmdRead && ipcIo.command != IpcIo::cmdWrite) {
-        debugs(0,0, HERE << "disker" << KidIdentifier <<
+        debugs(0, DBG_CRITICAL, HERE << "disker" << KidIdentifier <<
                " should not receive " << ipcIo.command <<
                " ipcIo" << workerId << '.' << ipcIo.requestId);
         return;
@@ -830,7 +830,7 @@
 
     if (TheFile < 0) {
         const int xerrno = errno;
-        debugs(47,0, HERE << "rock db error opening " << path << ": " <<
+        debugs(47, DBG_CRITICAL, HERE << "rock db error opening " << path << ": " <<
                xstrerr(xerrno));
         return false;
     }

=== modified file 'src/DiskIO/Mmapped/MmappedFile.cc'
--- src/DiskIO/Mmapped/MmappedFile.cc	2012-07-20 15:31:04 +0000
+++ src/DiskIO/Mmapped/MmappedFile.cc	2012-08-02 21:10:18 +0000
@@ -187,10 +187,10 @@
     const ssize_t written =
         pwrite(fd, aRequest->buf, aRequest->len, aRequest->offset);
     if (written < 0) {
-        debugs(79,1, HERE << "error: " << xstrerr(errno));
+        debugs(79, DBG_IMPORTANT, HERE << "error: " << xstrerr(errno));
         error_ = true;
     } else if (static_cast<size_t>(written) != aRequest->len) {
-        debugs(79,1, HERE << "problem: " << written << " < " << aRequest->len);
+        debugs(79, DBG_IMPORTANT, HERE << "problem: " << written << " < " << aRequest->len);
         error_ = true;
     }
 

=== modified file 'src/DiskIO/Mmapped/MmappedFile.h'
--- src/DiskIO/Mmapped/MmappedFile.h	2011-01-27 21:14:56 +0000
+++ src/DiskIO/Mmapped/MmappedFile.h	2012-08-04 12:11:57 +0000
@@ -26,7 +26,6 @@
     virtual bool ioInProgress() const;
 
 private:
-    CBDATA_CLASS(MmappedFile);
 
     char const *path_;
     RefCount<IORequestor> ioRequestor;
@@ -41,6 +40,7 @@
     bool error_;
 
     void doClose();
+    CBDATA_CLASS(MmappedFile);
 };
 
 #endif /* SQUID_MMAPPEDFILE_H */

=== modified file 'src/EventLoop.cc'
--- src/EventLoop.cc	2012-01-20 18:55:04 +0000
+++ src/EventLoop.cc	2012-08-02 21:18:43 +0000
@@ -134,7 +134,7 @@
 
     if (error) {
         ++errcount;
-        debugs(1, 0, "Select loop Error. Retry " << errcount);
+        debugs(1, DBG_CRITICAL, "Select loop Error. Retry " << errcount);
     } else
         errcount = 0;
 

=== modified file 'src/HelperChildConfig.cc'
--- src/HelperChildConfig.cc	2012-01-20 18:55:04 +0000
+++ src/HelperChildConfig.cc	2012-08-02 21:18:43 +0000
@@ -59,7 +59,7 @@
         } else if (strncmp(token, "idle=", 5) == 0) {
             n_idle = atoi(token + 5);
             if (n_idle < 1) {
-                debugs(0,0,"WARNING OVERIDE: Using idle=0 for helpers causes request failures. Overiding to use idle=1 instead.");
+                debugs(0, DBG_CRITICAL, "WARNING OVERIDE: Using idle=0 for helpers causes request failures. Overiding to use idle=1 instead.");
                 n_idle = 1;
             }
         } else if (strncmp(token, "concurrency=", 12) == 0) {
@@ -72,12 +72,12 @@
     /* simple sanity. */
 
     if (n_startup > n_max) {
-        debugs(0,0,"WARNING OVERIDE: Capping startup=" << n_startup << " to the defined maximum (" << n_max <<")");
+        debugs(0, DBG_CRITICAL, "WARNING OVERIDE: Capping startup=" << n_startup << " to the defined maximum (" << n_max <<")");
         n_startup = n_max;
     }
 
     if (n_idle > n_max) {
-        debugs(0,0,"WARNING OVERIDE: Capping idle=" << n_idle << " to the defined maximum (" << n_max <<")");
+        debugs(0, DBG_CRITICAL, "WARNING OVERIDE: Capping idle=" << n_idle << " to the defined maximum (" << n_max <<")");
         n_idle = n_max;
     }
 }

=== modified file 'src/HttpHeader.cc'
--- src/HttpHeader.cc	2012-07-23 15:34:12 +0000
+++ src/HttpHeader.cc	2012-08-02 21:18:43 +0000
@@ -456,7 +456,7 @@
             /* tmp hack to try to avoid coredumps */
 
             if (e->id < 0 || e->id >= HDR_ENUM_END) {
-                debugs(55, 0, "HttpHeader::clean BUG: entry[" << pos << "] is invalid (" << e->id << "). Ignored.");
+                debugs(55, DBG_CRITICAL, "HttpHeader::clean BUG: entry[" << pos << "] is invalid (" << e->id << "). Ignored.");
             } else {
                 HttpHeaderStats[owner].fieldTypeDistr.count(e->id);
                 /* yes, this deletion leaves us in an inconsistent state */
@@ -548,7 +548,7 @@
 
     char *nulpos;
     if ((nulpos = (char*)memchr(header_start, '\0', header_end - header_start))) {
-        debugs(55, 1, "WARNING: HTTP header contains NULL characters {" <<
+        debugs(55, DBG_IMPORTANT, "WARNING: HTTP header contains NULL characters {" <<
                getStringPrefix(header_start, nulpos) << "}\nNULL\n{" << getStringPrefix(nulpos+1, header_end));
         goto reset;
     }
@@ -580,7 +580,7 @@
                             cr_only = false;
                     }
                     if (cr_only) {
-                        debugs(55, 1, "WARNING: Rejecting HTTP request with a CR+ "
+                        debugs(55, DBG_IMPORTANT, "WARNING: Rejecting HTTP request with a CR+ "
                                "header field to prevent request smuggling attacks: {" <<
                                getStringPrefix(header_start, header_end) << "}");
                         goto reset;
@@ -590,7 +590,7 @@
 
             /* Barf on stray CR characters */
             if (memchr(this_line, '\r', field_end - this_line)) {
-                debugs(55, 1, "WARNING: suspicious CR characters in HTTP header {" <<
+                debugs(55, DBG_IMPORTANT, "WARNING: suspicious CR characters in HTTP header {" <<
                        getStringPrefix(field_start, field_end) << "}");
 
                 if (Config.onoff.relaxed_header_parser) {
@@ -605,7 +605,7 @@
             }
 
             if (this_line + 1 == field_end && this_line > field_start) {
-                debugs(55, 1, "WARNING: Blank continuation line in HTTP header {" <<
+                debugs(55, DBG_IMPORTANT, "WARNING: Blank continuation line in HTTP header {" <<
                        getStringPrefix(header_start, header_end) << "}");
                 goto reset;
             }
@@ -613,7 +613,7 @@
 
         if (field_start == field_end) {
             if (field_ptr < header_end) {
-                debugs(55, 1, "WARNING: unparseable HTTP header field near {" <<
+                debugs(55, DBG_IMPORTANT, "WARNING: unparseable HTTP header field near {" <<
                        getStringPrefix(field_start, header_end) << "}");
                 goto reset;
             }
@@ -622,7 +622,7 @@
         }
 
         if ((e = HttpHeaderEntry::parse(field_start, field_end)) == NULL) {
-            debugs(55, 1, "WARNING: unparseable HTTP header field {" <<
+            debugs(55, DBG_IMPORTANT, "WARNING: unparseable HTTP header field {" <<
                    getStringPrefix(field_start, field_end) << "}");
             debugs(55, Config.onoff.relaxed_header_parser <= 0 ? 1 : 2,
                    " in {" << getStringPrefix(header_start, header_end) << "}");
@@ -646,11 +646,11 @@
                 }
 
                 if (!httpHeaderParseOffset(e->value.termedBuf(), &l1)) {
-                    debugs(55, 1, "WARNING: Unparseable content-length '" << e->value << "'");
+                    debugs(55, DBG_IMPORTANT, "WARNING: Unparseable content-length '" << e->value << "'");
                     delete e;
                     continue;
                 } else if (!httpHeaderParseOffset(e2->value.termedBuf(), &l2)) {
-                    debugs(55, 1, "WARNING: Unparseable content-length '" << e2->value << "'");
+                    debugs(55, DBG_IMPORTANT, "WARNING: Unparseable content-length '" << e2->value << "'");
                     delById(e2->id);
                 } else if (l1 > l2) {
                     delById(e2->id);
@@ -1544,7 +1544,7 @@
 
     if (name_len > 65534) {
         /* String must be LESS THAN 64K and it adds a terminating NULL */
-        debugs(55, 1, "WARNING: ignoring header name of " << name_len << " bytes");
+        debugs(55, DBG_IMPORTANT, "WARNING: ignoring header name of " << name_len << " bytes");
         return NULL;
     }
 
@@ -1590,7 +1590,7 @@
 
     if (field_end - value_start > 65534) {
         /* String must be LESS THAN 64K and it adds a terminating NULL */
-        debugs(55, 1, "WARNING: ignoring '" << name << "' header of " << (field_end - value_start) << " bytes");
+        debugs(55, DBG_IMPORTANT, "WARNING: ignoring '" << name << "' header of " << (field_end - value_start) << " bytes");
 
         if (id == HDR_OTHER)
             name.clean();

=== modified file 'src/HttpMsg.cc'
--- src/HttpMsg.cc	2012-07-20 15:31:04 +0000
+++ src/HttpMsg.cc	2012-08-02 21:10:18 +0000
@@ -164,7 +164,7 @@
 
     // TODO: move to httpReplyParseStep()
     if (hdr_len > Config.maxReplyHeaderSize || (hdr_len <= 0 && (size_t)buf->contentSize() > Config.maxReplyHeaderSize)) {
-        debugs(58, 1, "HttpMsg::parse: Too large reply header (" << hdr_len << " > " << Config.maxReplyHeaderSize);
+        debugs(58, DBG_IMPORTANT, "HttpMsg::parse: Too large reply header (" << hdr_len << " > " << Config.maxReplyHeaderSize);
         *error = HTTP_HEADER_TOO_LARGE;
         return false;
     }
@@ -196,7 +196,7 @@
     debugs(58, 9, "HttpMsg::parse success (" << hdr_len << " bytes) near '" << buf->content() << "'");
 
     if (hdr_sz != (int)hdr_len) {
-        debugs(58, 1, "internal HttpMsg::parse vs. headersEnd error: " <<
+        debugs(58, DBG_IMPORTANT, "internal HttpMsg::parse vs. headersEnd error: " <<
                hdr_sz << " != " << hdr_len);
         hdr_sz = (int)hdr_len; // because old http.cc code used hdr_len
     }

=== modified file 'src/HttpRequest.cc'
--- src/HttpRequest.cc	2012-07-23 07:02:06 +0000
+++ src/HttpRequest.cc	2012-08-02 21:10:18 +0000
@@ -319,7 +319,7 @@
         ++end;                 // back to space
 
         if (2 != sscanf(ver + 5, "%d.%d", &http_ver.major, &http_ver.minor)) {
-            debugs(73, 1, "parseRequestLine: Invalid HTTP identifier.");
+            debugs(73, DBG_IMPORTANT, "parseRequestLine: Invalid HTTP identifier.");
             return false;
         }
     } else {

=== modified file 'src/HttpRequestMethod.cc'
--- src/HttpRequestMethod.cc	2012-07-17 17:38:50 +0000
+++ src/HttpRequestMethod.cc	2012-08-02 21:10:18 +0000
@@ -142,12 +142,12 @@
         /* Don't free statically allocated "%EXTnn" string */
         RequestMethodStr[method] = xstrdup(mstr);
 
-        debugs(23, 1, "Extension method '" << mstr << "' added, enum=" << method);
+        debugs(23, DBG_IMPORTANT, "Extension method '" << mstr << "' added, enum=" << method);
 
         return;
     }
 
-    debugs(23, 1, "WARNING: Could not add new extension method '" << mstr << "' due to lack of array space");
+    debugs(23, DBG_IMPORTANT, "WARNING: Could not add new extension method '" << mstr << "' due to lack of array space");
 #endif
 }
 

=== modified file 'src/LeakFinder.cc'
--- src/LeakFinder.cc	2012-07-20 15:31:04 +0000
+++ src/LeakFinder.cc	2012-08-02 21:10:18 +0000
@@ -128,14 +128,14 @@
 
     last_dump = squid_curtime;
 
-    debugs(45, 1, "Tracking " << count << " pointers");
+    debugs(45, DBG_IMPORTANT, "Tracking " << count << " pointers");
 
     hash_first(table);
 
     LeakFinderPtr *c;
 
     while ((c = (LeakFinderPtr *)hash_next(table))) {
-        debugs(45, 1, std::setw(20) << c->key << " last used " << std::setw(9) << (squid_curtime - c->when) <<
+        debugs(45, DBG_IMPORTANT, std::setw(20) << c->key << " last used " << std::setw(9) << (squid_curtime - c->when) <<
                " seconds ago by " << c->file << ":" << c->line);
     }
 }

=== modified file 'src/LoadableModules.cc'
--- src/LoadableModules.cc	2012-01-20 18:55:04 +0000
+++ src/LoadableModules.cc	2012-08-02 21:10:18 +0000
@@ -6,7 +6,7 @@
 static void
 LoadModule(const char *fname)
 {
-    debugs(1, 1, "Loading Squid module from '" << fname << "'");
+    debugs(1, DBG_IMPORTANT, "Loading Squid module from '" << fname << "'");
 
     LoadableModule *m = new LoadableModule(fname);
     m->load();
@@ -21,5 +21,5 @@
     int count = 0;
     for (const wordlist *i = names; i; i = i->next, ++count)
         LoadModule(i->key);
-    debugs(1, 1, "Squid plugin modules loaded: " << count);
+    debugs(1, DBG_IMPORTANT, "Squid plugin modules loaded: " << count);
 }

=== modified file 'src/MemBuf.h'
--- src/MemBuf.h	2009-12-26 00:25:57 +0000
+++ src/MemBuf.h	2012-08-04 12:11:57 +0000
@@ -134,8 +134,6 @@
 
     void grow(mb_size_t min_cap);
 
-    CBDATA_CLASS2(MemBuf);
-
 public:
     /**
      \deprecated use space*() and content*() methods to access safely instead.
@@ -164,9 +162,10 @@
     unsigned stolen:1;		/* the buffer has been stolen for use by someone else */
 
 #if 0
-
     unsigned valid:1;		/* to be used for debugging only! */
 #endif
+
+    CBDATA_CLASS2(MemBuf);
 };
 
 #if _USE_INLINE_

=== modified file 'src/MemObject.cc'
--- src/MemObject.cc	2012-07-20 12:44:39 +0000
+++ src/MemObject.cc	2012-08-02 21:10:18 +0000
@@ -171,16 +171,16 @@
     data_hdr.dump();
 #if 0
     /* do we want this one? */
-    debugs(20, 1, "MemObject->data.origin_offset: " << (data_hdr.head ? data_hdr.head->nodeBuffer.offset : 0));
+    debugs(20, DBG_IMPORTANT, "MemObject->data.origin_offset: " << (data_hdr.head ? data_hdr.head->nodeBuffer.offset : 0));
 #endif
 
-    debugs(20, 1, "MemObject->start_ping: " << start_ping.tv_sec  << "."<< std::setfill('0') << std::setw(6) << start_ping.tv_usec);
-    debugs(20, 1, "MemObject->inmem_hi: " << data_hdr.endOffset());
-    debugs(20, 1, "MemObject->inmem_lo: " << inmem_lo);
-    debugs(20, 1, "MemObject->nclients: " << nclients);
-    debugs(20, 1, "MemObject->reply: " << _reply);
-    debugs(20, 1, "MemObject->request: " << request);
-    debugs(20, 1, "MemObject->log_url: " << log_url << " " << checkNullString(log_url));
+    debugs(20, DBG_IMPORTANT, "MemObject->start_ping: " << start_ping.tv_sec  << "."<< std::setfill('0') << std::setw(6) << start_ping.tv_usec);
+    debugs(20, DBG_IMPORTANT, "MemObject->inmem_hi: " << data_hdr.endOffset());
+    debugs(20, DBG_IMPORTANT, "MemObject->inmem_lo: " << inmem_lo);
+    debugs(20, DBG_IMPORTANT, "MemObject->nclients: " << nclients);
+    debugs(20, DBG_IMPORTANT, "MemObject->reply: " << _reply);
+    debugs(20, DBG_IMPORTANT, "MemObject->request: " << request);
+    debugs(20, DBG_IMPORTANT, "MemObject->log_url: " << log_url << " " << checkNullString(log_url));
 }
 
 HttpReply const *

=== modified file 'src/Server.cc'
--- src/Server.cc	2012-06-19 16:08:52 +0000
+++ src/Server.cc	2012-08-02 21:10:18 +0000
@@ -379,7 +379,7 @@
     }
 
     if (io.flag) {
-        debugs(11, 1, "sentRequestBody error: FD " << io.fd << ": " << xstrerr(io.xerrno));
+        debugs(11, DBG_IMPORTANT, "sentRequestBody error: FD " << io.fd << ": " << xstrerr(io.xerrno));
         ErrorState *err;
         err = new ErrorState(ERR_WRITE_ERROR, HTTP_BAD_GATEWAY, fwd->request);
         err->xerrno = io.xerrno;

=== modified file 'src/StoreClient.h'
--- src/StoreClient.h	2010-11-27 06:44:33 +0000
+++ src/StoreClient.h	2012-08-04 12:11:57 +0000
@@ -99,7 +99,6 @@
     StoreIOBuffer copyInto;
 
 private:
-    CBDATA_CLASS(store_client);
     void fileRead();
     void scheduleDiskRead();
     void scheduleMemRead();
@@ -111,9 +110,7 @@
     bool object_ok;
 
     /* Until we finish stuffing code into store_client */
-
 public:
-
     struct Callback {
         Callback ():callback_handler(NULL), callback_data(NULL) {}
 
@@ -122,6 +119,10 @@
         STCB *callback_handler;
         void *callback_data;
     } _callback;
+
+private:
+    CBDATA_CLASS(store_client);
+
 };
 
 SQUIDCEXTERN void storeClientCopy(store_client *, StoreEntry *, StoreIOBuffer, STCB *, void *);

=== modified file 'src/StoreMeta.cc'
--- src/StoreMeta.cc	2012-01-20 18:55:04 +0000
+++ src/StoreMeta.cc	2012-08-02 21:18:43 +0000
@@ -49,7 +49,7 @@
 {
     /* VOID is reserved, and new types have to be added as classes */
     if (type <= STORE_META_VOID || type >= STORE_META_END + 10) {
-        debugs(20, 0, "storeSwapMetaUnpack: bad type (" << type << ")!");
+        debugs(20, DBG_CRITICAL, "storeSwapMetaUnpack: bad type (" << type << ")!");
         return false;
     }
 
@@ -66,7 +66,7 @@
             type == STORE_META_KEY_SHA ||
             type == STORE_META_HITMETERING ||
             type == STORE_META_VALID) {
-        debugs(20, 0, "Obsolete and unused type (" << type << ") in disk metadata");
+        debugs(20, DBG_CRITICAL, "Obsolete and unused type (" << type << ") in disk metadata");
         return false;
     }
 
@@ -104,7 +104,7 @@
 StoreMeta::validLength(int aLength) const
 {
     if (!IntRange (MinimumTLVLength, MaximumTLVLength).includes(aLength)) {
-        debugs(20, 0, "storeSwapMetaUnpack: insane length (" << aLength << ")!");
+        debugs(20, DBG_CRITICAL, "storeSwapMetaUnpack: insane length (" << aLength << ")!");
         return false;
     }
 
@@ -147,7 +147,7 @@
         break;
 
     default:
-        debugs(20, 0, "Attempt to create unknown concrete StoreMeta");
+        debugs(20, DBG_CRITICAL, "Attempt to create unknown concrete StoreMeta");
         return NULL;
     }
 
@@ -205,7 +205,7 @@
         break;
 
     default:
-        debugs(20, 1, "WARNING: got unused STORE_META type " << getType());
+        debugs(20, DBG_IMPORTANT, "WARNING: got unused STORE_META type " << getType());
         break;
     }
 

=== modified file 'src/StoreMetaMD5.cc'
--- src/StoreMetaMD5.cc	2012-01-20 18:55:04 +0000
+++ src/StoreMetaMD5.cc	2012-08-02 21:10:18 +0000
@@ -59,7 +59,7 @@
         debugs(20, 2, "\t" << e->getMD5Text());
 
         if (isPowTen(++md5_mismatches))
-            debugs(20, 1, "WARNING: " << md5_mismatches << " swapin MD5 mismatches");
+            debugs(20, DBG_IMPORTANT, "WARNING: " << md5_mismatches << " swapin MD5 mismatches");
 
         return false;
     }

=== modified file 'src/StoreMetaURL.cc'
--- src/StoreMetaURL.cc	2012-01-20 18:55:04 +0000
+++ src/StoreMetaURL.cc	2012-08-02 21:10:18 +0000
@@ -47,8 +47,8 @@
         return true;
 
     if (strcasecmp(e->mem_obj->url, (char *)value)) {
-        debugs(20, 1, "storeClientReadHeader: URL mismatch");
-        debugs(20, 1, "\t{" << (char *) value << "} != {" << e->mem_obj->url << "}");
+        debugs(20, DBG_IMPORTANT, "storeClientReadHeader: URL mismatch");
+        debugs(20, DBG_IMPORTANT, "\t{" << (char *) value << "} != {" << e->mem_obj->url << "}");
         return false;
     }
 

=== modified file 'src/StoreMetaUnpacker.cc'
--- src/StoreMetaUnpacker.cc	2012-07-23 19:37:47 +0000
+++ src/StoreMetaUnpacker.cc	2012-08-02 21:18:43 +0000
@@ -110,8 +110,8 @@
     getLength();
 
     if (position + length > *hdr_len) {
-        debugs(20, 0, "storeSwapMetaUnpack: overflow!");
-        debugs(20, 0, "\ttype=" << type << ", length=" << length << ", *hdr_len=" << *hdr_len << ", offset=" << position);
+        debugs(20, DBG_CRITICAL, "storeSwapMetaUnpack: overflow!");
+        debugs(20, DBG_CRITICAL, "\ttype=" << type << ", length=" << length << ", *hdr_len=" << *hdr_len << ", offset=" << position);
         return false;
     }
 

=== modified file 'src/SwapDir.cc'
--- src/SwapDir.cc	2012-07-23 19:37:47 +0000
+++ src/SwapDir.cc	2012-08-02 21:10:18 +0000
@@ -266,7 +266,7 @@
 
     if (isaReconfig) {
         if (old_read_only != flags.read_only) {
-            debugs(3, 1, "Cache dir '" << path << "' now " << (flags.read_only ? "No-Store" : "Read-Write"));
+            debugs(3, DBG_IMPORTANT, "Cache dir '" << path << "' now " << (flags.read_only ? "No-Store" : "Read-Write"));
         }
     }
 }

=== modified file 'src/WinSvc.cc'
--- src/WinSvc.cc	2012-07-19 13:49:54 +0000
+++ src/WinSvc.cc	2012-08-02 21:10:18 +0000
@@ -457,10 +457,10 @@
     while (1) {
         Result = NotifyAddrChange(NULL, NULL);
         if (Result != NO_ERROR) {
-            debugs(1, 1, "NotifyAddrChange error " << Result);
+            debugs(1, DBG_IMPORTANT, "NotifyAddrChange error " << Result);
             return 1;
         }
-        debugs(1, 1, "Notification of IP address change received, requesting Squid reconfiguration ...");
+        debugs(1, DBG_IMPORTANT, "Notification of IP address change received, requesting Squid reconfiguration ...");
         reconfigure(SIGHUP);
     }
     return 0;
@@ -478,7 +478,7 @@
         if (NotifyAddrChange_thread == NULL) {
             status = GetLastError();
             NotifyAddrChange_thread = INVALID_HANDLE_VALUE;
-            debugs(1, 1, "Failed to start IP monitor thread.");
+            debugs(1, DBG_IMPORTANT, "Failed to start IP monitor thread.");
         } else
             debugs(1, 2, "Starting IP monitor thread [" << threadID << "] ...");
     }
@@ -628,10 +628,10 @@
 
         if (!SetServiceStatus(svcHandle, &svcStatus)) {
             status = GetLastError();
-            debugs(1, 1, "SetServiceStatus error " << status);
+            debugs(1, DBG_IMPORTANT, "SetServiceStatus error " << status);
         }
 
-        debugs(1, 1, "Leaving Squid service");
+        debugs(1, DBG_IMPORTANT, "Leaving Squid service");
         return;
 
     case _WIN_SQUID_SERVICE_CONTROL_INTERROGATE:
@@ -639,7 +639,7 @@
 
         if (!SetServiceStatus(svcHandle, &svcStatus)) {
             status = GetLastError();
-            debugs(1, 1, "SetServiceStatus error " << status);
+            debugs(1, DBG_IMPORTANT, "SetServiceStatus error " << status);
         }
 
         break;
@@ -666,14 +666,14 @@
 
         if (!SetServiceStatus(svcHandle, &svcStatus)) {
             status = GetLastError();
-            debugs(1, 1, "SetServiceStatus error " << status);
+            debugs(1, DBG_IMPORTANT, "SetServiceStatus error " << status);
         }
 
-        debugs(1, 1, "Leaving Squid service");
+        debugs(1, DBG_IMPORTANT, "Leaving Squid service");
         break;
 
     default:
-        debugs(1, 1, "Unrecognized opcode " << Opcode);
+        debugs(1, DBG_IMPORTANT, "Unrecognized opcode " << Opcode);
     }
 
     return;

=== modified file 'src/acl/Acl.cc'
--- src/acl/Acl.cc	2012-06-19 16:08:52 +0000
+++ src/acl/Acl.cc	2012-08-02 21:18:43 +0000
@@ -99,13 +99,13 @@
     /* snarf the ACL name */
 
     if ((t = strtok(NULL, w_space)) == NULL) {
-        debugs(28, 0, "aclParseAclLine: missing ACL name.");
+        debugs(28, DBG_CRITICAL, "aclParseAclLine: missing ACL name.");
         parser.destruct();
         return;
     }
 
     if (strlen(t) >= ACL_NAME_SZ) {
-        debugs(28, 0, "aclParseAclLine: aclParseAclLine: ACL name '" << t <<
+        debugs(28, DBG_CRITICAL, "aclParseAclLine: aclParseAclLine: ACL name '" << t <<
                "' too long, max " << ACL_NAME_SZ - 1 << " characters supported");
         parser.destruct();
         return;
@@ -116,7 +116,7 @@
     const char *theType;
 
     if ((theType = strtok(NULL, w_space)) == NULL) {
-        debugs(28, 0, "aclParseAclLine: missing ACL type.");
+        debugs(28, DBG_CRITICAL, "aclParseAclLine: missing ACL type.");
         parser.destruct();
         return;
     }
@@ -160,7 +160,7 @@
         new_acl = 1;
     } else {
         if (strcmp (A->typeString(),theType) ) {
-            debugs(28, 0, "aclParseAclLine: ACL '" << A->name << "' already exists with different type.");
+            debugs(28, DBG_CRITICAL, "aclParseAclLine: ACL '" << A->name << "' already exists with different type.");
             parser.destruct();
             return;
         }
@@ -187,7 +187,7 @@
         return;
 
     if (A->empty()) {
-        debugs(28, 0, "Warning: empty ACL: " << A->cfgline);
+        debugs(28, DBG_CRITICAL, "Warning: empty ACL: " << A->cfgline);
     }
 
     if (!A->valid()) {
@@ -303,12 +303,12 @@
     int rv;
 
     if (!checklist->hasRequest() && requiresRequest()) {
-        debugs(28, 1, "ACL::checklistMatches WARNING: '" << name << "' ACL is used but there is no HTTP request -- not matching.");
+        debugs(28, DBG_IMPORTANT, "ACL::checklistMatches WARNING: '" << name << "' ACL is used but there is no HTTP request -- not matching.");
         return 0;
     }
 
     if (!checklist->hasReply() && requiresReply()) {
-        debugs(28, 1, "ACL::checklistMatches WARNING: '" << name << "' ACL is used but there is no HTTP reply -- not matching.");
+        debugs(28, DBG_IMPORTANT, "ACL::checklistMatches WARNING: '" << name << "' ACL is used but there is no HTTP reply -- not matching.");
         return 0;
     }
 

=== modified file 'src/acl/Arp.cc'
--- src/acl/Arp.cc	2012-01-20 18:55:04 +0000
+++ src/acl/Arp.cc	2012-08-02 21:18:43 +0000
@@ -115,14 +115,14 @@
     debugs(28, 5, "aclParseArpData: " << t);
 
     if (sscanf(t, "%[0-9a-fA-F:]", buf) != 1) {
-        debugs(28, 0, "aclParseArpData: Bad ethernet address: '" << t << "'");
+        debugs(28, DBG_CRITICAL, "aclParseArpData: Bad ethernet address: '" << t << "'");
         safe_free(q);
         return NULL;
     }
 
     if (!q->decode(buf)) {
-        debugs(28, 0, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(28, 0, "aclParseArpData: Ignoring invalid ARP acl entry: can't parse '" << buf << "'");
+        debugs(28, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(28, DBG_CRITICAL, "aclParseArpData: Ignoring invalid ARP acl entry: can't parse '" << buf << "'");
         safe_free(q);
         return NULL;
     }

=== modified file 'src/acl/Asn.cc'
--- src/acl/Asn.cc	2012-07-02 12:28:10 +0000
+++ src/acl/Asn.cc	2012-08-02 21:10:18 +0000
@@ -295,11 +295,11 @@
         asStateFree(asState);
         return;
     } else if (result.flags.error) {
-        debugs(53, 1, "asHandleReply: Called with Error set and size=" << (unsigned int) result.length);
+        debugs(53, DBG_IMPORTANT, "asHandleReply: Called with Error set and size=" << (unsigned int) result.length);
         asStateFree(asState);
         return;
     } else if (HTTP_OK != e->getReply()->sline.status) {
-        debugs(53, 1, "WARNING: AS " << asState->as_number << " whois request failed");
+        debugs(53, DBG_IMPORTANT, "WARNING: AS " << asState->as_number << " whois request failed");
         asStateFree(asState);
         return;
     }

=== modified file 'src/acl/Eui64.cc'
--- src/acl/Eui64.cc	2012-01-20 18:55:04 +0000
+++ src/acl/Eui64.cc	2012-08-02 21:18:43 +0000
@@ -89,14 +89,14 @@
     debugs(28, 5, "aclParseEuiData: " << t);
 
     if (sscanf(t, "%[0-9a-fA-F:]", buf) != 1) {
-        debugs(28, 0, "aclParseEuiData: Bad EUI-64 address: '" << t << "'");
+        debugs(28, DBG_CRITICAL, "aclParseEuiData: Bad EUI-64 address: '" << t << "'");
         safe_free(q);
         return NULL;
     }
 
     if (!q->decode(buf)) {
-        debugs(28, 0, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(28, 0, "aclParseEuiData: Ignoring invalid EUI-64 acl entry: can't parse '" << buf << "'");
+        debugs(28, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(28, DBG_CRITICAL, "aclParseEuiData: Ignoring invalid EUI-64 acl entry: can't parse '" << buf << "'");
         safe_free(q);
         return NULL;
     }

=== modified file 'src/acl/FilledChecklist.h'
--- src/acl/FilledChecklist.h	2012-06-28 18:26:44 +0000
+++ src/acl/FilledChecklist.h	2012-08-04 12:11:57 +0000
@@ -73,18 +73,17 @@
     ExternalACLEntry *extacl_entry;
 
 private:
-    CBDATA_CLASS(ACLFilledChecklist);
-
     ConnStateData * conn_;          /**< hack for ident and NTLM */
     int fd_;                        /**< may be available when conn_ is not */
     bool destinationDomainChecked_;
     bool sourceDomainChecked_;
 
-private:
     /// not implemented; will cause link failures if used
     ACLFilledChecklist(const ACLFilledChecklist &);
     /// not implemented; will cause link failures if used
     ACLFilledChecklist &operator=(const ACLFilledChecklist &);
+private:
+    CBDATA_CLASS(ACLFilledChecklist);
 };
 
 /// convenience and safety wrapper for dynamic_cast<ACLFilledChecklist*>

=== modified file 'src/acl/Gadgets.cc'
--- src/acl/Gadgets.cc	2012-07-02 12:28:10 +0000
+++ src/acl/Gadgets.cc	2012-08-02 21:18:43 +0000
@@ -120,8 +120,8 @@
     /* first expect a page name */
 
     if ((t = strtok(NULL, w_space)) == NULL) {
-        debugs(28, 0, "aclParseDenyInfoLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(28, 0, "aclParseDenyInfoLine: missing 'error page' parameter.");
+        debugs(28, DBG_CRITICAL, "aclParseDenyInfoLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(28, DBG_CRITICAL, "aclParseDenyInfoLine: missing 'error page' parameter.");
         return;
     }
 
@@ -140,8 +140,8 @@
     }
 
     if (A->acl_list == NULL) {
-        debugs(28, 0, "aclParseDenyInfoLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(28, 0, "aclParseDenyInfoLine: deny_info line contains no ACL's, skipping");
+        debugs(28, DBG_CRITICAL, "aclParseDenyInfoLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(28, DBG_CRITICAL, "aclParseDenyInfoLine: deny_info line contains no ACL's, skipping");
         memFree(A, MEM_ACL_DENY_INFO_LIST);
         return;
     }
@@ -163,8 +163,8 @@
     /* first expect either 'allow' or 'deny' */
 
     if ((t = strtok(NULL, w_space)) == NULL) {
-        debugs(28, 0, "aclParseAccessLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(28, 0, "aclParseAccessLine: missing 'allow' or 'deny'.");
+        debugs(28, DBG_CRITICAL, "aclParseAccessLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(28, DBG_CRITICAL, "aclParseAccessLine: missing 'allow' or 'deny'.");
         return;
     }
 
@@ -175,8 +175,8 @@
     else if (!strcmp(t, "deny"))
         A->allow = ACCESS_DENIED;
     else {
-        debugs(28, 0, "aclParseAccessLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(28, 0, "aclParseAccessLine: expecting 'allow' or 'deny', got '" << t << "'.");
+        debugs(28, DBG_CRITICAL, "aclParseAccessLine: " << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(28, DBG_CRITICAL, "aclParseAccessLine: expecting 'allow' or 'deny', got '" << t << "'.");
         delete A;
         return;
     }
@@ -184,8 +184,8 @@
     aclParseAclList(parser, &A->aclList);
 
     if (A->aclList == NULL) {
-        debugs(28, 0, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(28, 0, "aclParseAccessLine: Access line contains no ACL's, skipping");
+        debugs(28, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(28, DBG_CRITICAL, "aclParseAccessLine: Access line contains no ACL's, skipping");
         delete A;
         return;
     }
@@ -221,7 +221,7 @@
         a = ACL::FindByName(t);
 
         if (a == NULL) {
-            debugs(28, 0, "aclParseAclList: ACL name '" << t << "' not found.");
+            debugs(28, DBG_CRITICAL, "aclParseAclList: ACL name '" << t << "' not found.");
             delete L;
             parser.destruct();
             continue;

=== modified file 'src/acl/HttpStatus.cc'
--- src/acl/HttpStatus.cc	2012-01-20 18:55:04 +0000
+++ src/acl/HttpStatus.cc	2012-08-02 21:18:43 +0000
@@ -76,9 +76,9 @@
         char bufb[8];
         a->toStr(bufa, sizeof(bufa));
         b->toStr(bufb, sizeof(bufb));
-        debugs(28, 0, "WARNING: '" << bufa << "' is a subrange of '" << bufb << "'");
-        debugs(28, 0, "WARNING: because of this '" << bufa << "' is ignored to keep splay tree searching predictable");
-        debugs(28, 0, "WARNING: You should probably remove '" << bufb << "' from the ACL named '" << AclMatchedName << "'");
+        debugs(28, DBG_CRITICAL, "WARNING: '" << bufa << "' is a subrange of '" << bufb << "'");
+        debugs(28, DBG_CRITICAL, "WARNING: because of this '" << bufa << "' is ignored to keep splay tree searching predictable");
+        debugs(28, DBG_CRITICAL, "WARNING: You should probably remove '" << bufb << "' from the ACL named '" << AclMatchedName << "'");
     }
 
     return ret;

=== modified file 'src/acl/IntRange.cc'
--- src/acl/IntRange.cc	2012-07-23 15:15:27 +0000
+++ src/acl/IntRange.cc	2012-08-02 21:18:43 +0000
@@ -71,7 +71,7 @@
             temp.end = port2+1;
             ranges.push_back(temp);
         } else {
-            debugs(28, 0, "ACLIntRange::parse: Invalid port value");
+            debugs(28, DBG_CRITICAL, "ACLIntRange::parse: Invalid port value");
             self_destruct();
         }
     }

=== modified file 'src/acl/Ip.cc'
--- src/acl/Ip.cc	2012-07-02 12:28:10 +0000
+++ src/acl/Ip.cc	2012-08-02 21:18:43 +0000
@@ -179,9 +179,9 @@
             a->toStr(buf_n1, 3*(MAX_IPSTRLEN+1));
             b->toStr(buf_n2, 3*(MAX_IPSTRLEN+1));
         }
-        debugs(28, 0, "WARNING: (" << (bina?'B':'A') << ") '" << buf_n1 << "' is a subnetwork of (" << (bina?'A':'B') << ") '" << buf_n2 << "'");
-        debugs(28, 0, "WARNING: because of this '" << (bina?buf_n2:buf_n1) << "' is ignored to keep splay tree searching predictable");
-        debugs(28, 0, "WARNING: You should probably remove '" << buf_n1 << "' from the ACL named '" << AclMatchedName << "'");
+        debugs(28, DBG_CRITICAL, "WARNING: (" << (bina?'B':'A') << ") '" << buf_n1 << "' is a subnetwork of (" << (bina?'A':'B') << ") '" << buf_n2 << "'");
+        debugs(28, DBG_CRITICAL, "WARNING: because of this '" << (bina?buf_n2:buf_n1) << "' is ignored to keep splay tree searching predictable");
+        debugs(28, DBG_CRITICAL, "WARNING: You should probably remove '" << buf_n1 << "' from the ACL named '" << AclMatchedName << "'");
     }
 
     return ret;
@@ -422,7 +422,7 @@
 
         int errcode = getaddrinfo(addr1,NULL,&hints,&hp);
         if (hp == NULL) {
-            debugs(28, 0, "aclIpParseIpData: Bad host/IP: '" << addr1 <<
+            debugs(28, DBG_CRITICAL, "aclIpParseIpData: Bad host/IP: '" << addr1 <<
                    "' in '" << t << "', flags=" << hints.ai_flags <<
                    " : (" << errcode << ") " << gai_strerror(errcode) );
             self_destruct();
@@ -458,7 +458,7 @@
         }
 
         if (*Q != NULL) {
-            debugs(28, 0, "aclIpParseIpData: Bad host/IP: '" << t << "'");
+            debugs(28, DBG_CRITICAL, "aclIpParseIpData: Bad host/IP: '" << t << "'");
             self_destruct();
             return NULL;
         }
@@ -476,7 +476,7 @@
 
     /* Decode addr1 */
     if (!*addr1 || !(q->addr1 = addr1)) {
-        debugs(28, 0, "aclIpParseIpData: unknown first address in '" << t << "'");
+        debugs(28, DBG_CRITICAL, "aclIpParseIpData: unknown first address in '" << t << "'");
         delete q;
         self_destruct();
         return NULL;
@@ -486,7 +486,7 @@
     if (!*addr2)
         q->addr2.SetAnyAddr();
     else if (!(q->addr2=addr2) ) {
-        debugs(28, 0, "aclIpParseIpData: unknown second address in '" << t << "'");
+        debugs(28, DBG_CRITICAL, "aclIpParseIpData: unknown second address in '" << t << "'");
         delete q;
         self_destruct();
         return NULL;
@@ -494,7 +494,7 @@
 
     /* Decode mask (NULL or empty means a exact host mask) */
     if (!DecodeMask(mask, q->mask, iptype)) {
-        debugs(28, 0, "aclParseIpData: unknown netmask '" << mask << "' in '" << t << "'");
+        debugs(28, DBG_CRITICAL, "aclParseIpData: unknown netmask '" << mask << "' in '" << t << "'");
         delete q;
         self_destruct();
         return NULL;
@@ -505,7 +505,7 @@
     changed += q->addr2.ApplyMask(q->mask);
 
     if (changed)
-        debugs(28, 0, "aclIpParseIpData: WARNING: Netmask masks away part of the specified IP in '" << t << "'");
+        debugs(28, DBG_CRITICAL, "aclIpParseIpData: WARNING: Netmask masks away part of the specified IP in '" << t << "'");
 
     debugs(28,9, HERE << "Parsed: " << q->addr1 << "-" << q->addr2 << "/" << q->mask << "(/" << q->mask.GetCIDR() <<")");
 

=== modified file 'src/acl/MaxConnection.cc'
--- src/acl/MaxConnection.cc	2012-01-20 18:55:04 +0000
+++ src/acl/MaxConnection.cc	2012-08-02 21:18:43 +0000
@@ -120,5 +120,5 @@
     if (0 != Config.onoff.client_db)
         return;
 
-    debugs(22, 0, "WARNING: 'maxconn' ACL (" << name << ") won't work with client_db disabled");
+    debugs(22, DBG_CRITICAL, "WARNING: 'maxconn' ACL (" << name << ") won't work with client_db disabled");
 }

=== modified file 'src/acl/Random.cc'
--- src/acl/Random.cc	2012-01-20 18:55:04 +0000
+++ src/acl/Random.cc	2012-08-02 21:18:43 +0000
@@ -88,7 +88,7 @@
         int a = xatoi(bufa);
         int b = xatoi(bufb);
         if (a == 0 || b == 0) {
-            debugs(28, 0, "aclParseRandomData: Bad Pattern: '" << t << "'");
+            debugs(28, DBG_CRITICAL, "aclParseRandomData: Bad Pattern: '" << t << "'");
             self_destruct();
         } else
             data = a / (double)(a+b);
@@ -96,14 +96,14 @@
         int a = xatoi(bufa);
         int b = xatoi(bufb);
         if (a == 0 || b == 0) {
-            debugs(28, 0, "aclParseRandomData: Bad Pattern: '" << t << "'");
+            debugs(28, DBG_CRITICAL, "aclParseRandomData: Bad Pattern: '" << t << "'");
             self_destruct();
         } else
             data = (double) a / (double) b;
     } else if (sscanf(t, "0.%[0-9]", bufa) == 1) {
         data = atof(t);
     } else {
-        debugs(28, 0, "aclParseRandomData: Bad Pattern: '" << t << "'");
+        debugs(28, DBG_CRITICAL, "aclParseRandomData: Bad Pattern: '" << t << "'");
         self_destruct();
     }
 

=== modified file 'src/acl/TimeData.cc'
--- src/acl/TimeData.cc	2012-01-20 18:55:04 +0000
+++ src/acl/TimeData.cc	2012-08-02 21:18:43 +0000
@@ -178,9 +178,9 @@
                     break;
 
                 default:
-                    debugs(28, 0, "" << cfg_filename << " line " << config_lineno <<
+                    debugs(28, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno <<
                            ": " << config_input_line);
-                    debugs(28, 0, "aclParseTimeSpec: Bad Day '" << *t << "'" );
+                    debugs(28, DBG_CRITICAL, "aclParseTimeSpec: Bad Day '" << *t << "'" );
                     break;
                 }
             }
@@ -188,7 +188,7 @@
             /* assume its time-of-day spec */
 
             if ((sscanf(t, "%d:%d-%d:%d", &h1, &m1, &h2, &m2) < 4) || (!((h1 >= 0 && h1 < 24) && ((h2 >= 0 && h2 < 24) || (h2 == 24 && m2 == 0)) && (m1 >= 0 && m1 < 60) && (m2 >= 0 && m2 < 60)))) {
-                debugs(28, 0, "aclParseTimeSpec: Bad time range '" << t << "'");
+                debugs(28, DBG_CRITICAL, "aclParseTimeSpec: Bad time range '" << t << "'");
                 self_destruct();
 
                 if (q != this)
@@ -211,7 +211,7 @@
             parsed_weekbits = 0;
 
             if (q->start > q->stop) {
-                debugs(28, 0, "aclParseTimeSpec: Reversed time range");
+                debugs(28, DBG_CRITICAL, "aclParseTimeSpec: Reversed time range");
                 self_destruct();
 
                 if (q != this)

=== modified file 'src/adaptation/AccessRule.cc'
--- src/adaptation/AccessRule.cc	2012-01-20 18:55:04 +0000
+++ src/adaptation/AccessRule.cc	2012-08-02 21:18:43 +0000
@@ -39,7 +39,7 @@
     }
 
     if (!group()) {
-        debugs(93,0, "ERROR: Unknown adaptation service or group name: '" <<
+        debugs(93, DBG_CRITICAL, "ERROR: Unknown adaptation service or group name: '" <<
                groupId << "'"); // TODO: fail on failures
     }
 }

=== modified file 'src/adaptation/Config.cc'
--- src/adaptation/Config.cc	2012-07-02 12:28:10 +0000
+++ src/adaptation/Config.cc	2012-08-02 21:18:43 +0000
@@ -219,7 +219,7 @@
     for (VISCI i = configs.begin(); i != configs.end(); ++i) {
         const ServiceConfigPointer cfg = *i;
         if (FindService(cfg->key) != NULL) {
-            debugs(93,0, "ERROR: Duplicate adaptation service name: " <<
+            debugs(93, DBG_CRITICAL, "ERROR: Duplicate adaptation service name: " <<
                    cfg->key);
             continue; // TODO: make fatal
         }
@@ -253,7 +253,7 @@
 Adaptation::Config::Finalize(bool enabled)
 {
     Enabled = enabled;
-    debugs(93,1, "Adaptation support is " << (Enabled ? "on" : "off."));
+    debugs(93, DBG_IMPORTANT, "Adaptation support is " << (Enabled ? "on" : "off."));
 
     FinalizeEach(AllServices(), "message adaptation services");
     FinalizeEach(AllGroups(), "message adaptation service groups");

=== modified file 'src/adaptation/ServiceConfig.cc'
--- src/adaptation/ServiceConfig.cc	2012-07-02 12:28:10 +0000
+++ src/adaptation/ServiceConfig.cc	2012-08-02 21:18:43 +0000
@@ -155,7 +155,7 @@
     // AYJ: most of this is duplicate of urlParse() in src/url.cc
 
     if (!value || !*value) {
-        debugs(3, 0, HERE << cfg_filename << ':' << config_lineno << ": " <<
+        debugs(3, DBG_CRITICAL, HERE << cfg_filename << ':' << config_lineno << ": " <<
                "empty adaptation service URI");
         return false;
     }
@@ -240,7 +240,7 @@
     len = e - s;
 
     if (len > 1024) {
-        debugs(3, 0, HERE << cfg_filename << ':' << config_lineno << ": " <<
+        debugs(3, DBG_CRITICAL, HERE << cfg_filename << ':' << config_lineno << ": " <<
                "long resource name (>1024), probably wrong");
     }
 
@@ -257,7 +257,7 @@
     else if (!strcmp(value, "1") || !strcmp(value, "on"))
         var = true;
     else {
-        debugs(3, 0, HERE << cfg_filename << ':' << config_lineno << ": " <<
+        debugs(3, DBG_CRITICAL, HERE << cfg_filename << ':' << config_lineno << ": " <<
                "wrong value for boolean " << name << "; " <<
                "'0', '1', 'on', or 'off' expected but got: " << value);
         return false;

=== modified file 'src/adaptation/ServiceGroups.cc'
--- src/adaptation/ServiceGroups.cc	2012-01-20 18:55:04 +0000
+++ src/adaptation/ServiceGroups.cc	2012-08-02 21:18:43 +0000
@@ -75,7 +75,7 @@
                     baselineKey = service->cfg().key;
                     baselineBypass = service->cfg().bypass;
                 } else if (baselineBypass != service->cfg().bypass) {
-                    debugs(93,0, "WARNING: Inconsistent bypass in " << kind <<
+                    debugs(93, DBG_CRITICAL, "WARNING: Inconsistent bypass in " << kind <<
                            ' ' << id << " may produce surprising results: " <<
                            baselineKey << " vs. " << serviceId);
                 }

=== modified file 'src/adaptation/ecap/ServiceRep.cc'
--- src/adaptation/ecap/ServiceRep.cc	2012-01-20 18:55:04 +0000
+++ src/adaptation/ecap/ServiceRep.cc	2012-08-02 21:10:18 +0000
@@ -264,7 +264,7 @@
             found = (*cfged)->cfg().uri == (*loaded)->uri().c_str();
         }
         if (!found)
-            debugs(93, 1, "Warning: loaded eCAP service has no matching " <<
+            debugs(93, DBG_IMPORTANT, "Warning: loaded eCAP service has no matching " <<
                    "ecap_service config option: " << (*loaded)->uri());
     }
 }

=== modified file 'src/adaptation/icap/History.cc'
--- src/adaptation/icap/History.cc	2012-01-20 18:55:04 +0000
+++ src/adaptation/icap/History.cc	2012-08-02 21:10:18 +0000
@@ -21,7 +21,7 @@
 void Adaptation::Icap::History::stop(const char *context)
 {
     if (!concurrencyLevel) {
-        debugs(93,1, HERE << "Internal error: poor history accounting " << this);
+        debugs(93, DBG_IMPORTANT, HERE << "Internal error: poor history accounting " << this);
         return;
     }
 

=== modified file 'src/adaptation/icap/ServiceRep.cc'
--- src/adaptation/icap/ServiceRep.cc	2012-07-10 15:44:23 +0000
+++ src/adaptation/icap/ServiceRep.cc	2012-08-02 21:10:18 +0000
@@ -254,7 +254,7 @@
         debugs(93,4, HERE << "keeping suspended, also for " << reason);
     } else {
         isSuspended = reason;
-        debugs(93,1, "suspending ICAP service for " << reason);
+        debugs(93, DBG_IMPORTANT, "suspending ICAP service for " << reason);
         scheduleUpdate(squid_curtime + TheConfig.service_revival_delay);
         announceStatusChange("suspended", true);
     }
@@ -455,7 +455,7 @@
         return;
 
     if (!theOptions->valid()) {
-        debugs(93,1, "WARNING: Squid got an invalid ICAP OPTIONS response " <<
+        debugs(93, DBG_IMPORTANT, "WARNING: Squid got an invalid ICAP OPTIONS response " <<
                "from service " << cfg().uri << "; error: " << theOptions->error);
         return;
     }
@@ -483,7 +483,7 @@
         }
 
         if (!method_found) {
-            debugs(93,1, "WARNING: Squid is configured to use ICAP method " <<
+            debugs(93, DBG_IMPORTANT, "WARNING: Squid is configured to use ICAP method " <<
                    cfg().methodStr() <<
                    " for service " << cfg().uri <<
                    " but OPTIONS response declares the methods are " << method_list);
@@ -498,7 +498,7 @@
     if (abs(skew) > theOptions->ttl()) {
         // TODO: If skew is negative, the option will be considered down
         // because of stale options. We should probably change this.
-        debugs(93, 1, "ICAP service's clock is skewed by " << skew <<
+        debugs(93, DBG_IMPORTANT, "ICAP service's clock is skewed by " << skew <<
                " seconds: " << cfg().uri);
     }
 }
@@ -540,7 +540,7 @@
         newOptions = new Adaptation::Icap::Options;
         newOptions->configure(r);
     } else {
-        debugs(93,1, "ICAP service got wrong options message " << status());
+        debugs(93, DBG_IMPORTANT, "ICAP service got wrong options message " << status());
     }
 
     handleNewOptions(newOptions);
@@ -599,7 +599,7 @@
         if (eventFind(&ServiceRep_noteTimeToUpdate, this))
             eventDelete(&ServiceRep_noteTimeToUpdate, this);
         else
-            debugs(93,1, "XXX: ICAP service lost an update event.");
+            debugs(93, DBG_IMPORTANT, "XXX: ICAP service lost an update event.");
         updateScheduled = false;
     }
 

=== modified file 'src/auth/AclMaxUserIp.cc'
--- src/auth/AclMaxUserIp.cc	2012-06-19 16:08:52 +0000
+++ src/auth/AclMaxUserIp.cc	2012-08-02 21:10:18 +0000
@@ -79,7 +79,7 @@
 ACLMaxUserIP::parse()
 {
     if (maximum) {
-        debugs(28, 1, "Attempting to alter already set User max IP acl");
+        debugs(28, DBG_IMPORTANT, "Attempting to alter already set User max IP acl");
         return;
     }
 
@@ -123,7 +123,7 @@
     if (authenticateAuthUserRequestIPCount(auth_user_request) <= maximum)
         return 0;
 
-    debugs(28, 1, "aclMatchUserMaxIP: user '" << auth_user_request->username() << "' tries to use too many IP addresses (max " << maximum << " allowed)!");
+    debugs(28, DBG_IMPORTANT, "aclMatchUserMaxIP: user '" << auth_user_request->username() << "' tries to use too many IP addresses (max " << maximum << " allowed)!");
 
     /* this is a match */
     if (flags.strict) {

=== modified file 'src/auth/AclProxyAuth.cc'
--- src/auth/AclProxyAuth.cc	2012-07-18 16:21:47 +0000
+++ src/auth/AclProxyAuth.cc	2012-08-02 21:18:43 +0000
@@ -117,12 +117,12 @@
 ACLProxyAuth::valid () const
 {
     if (authenticateSchemeCount() == 0) {
-        debugs(28, 0, "Can't use proxy auth because no authentication schemes were compiled.");
+        debugs(28, DBG_CRITICAL, "Can't use proxy auth because no authentication schemes were compiled.");
         return false;
     }
 
     if (authenticateActiveSchemeCount() == 0) {
-        debugs(28, 0, "Can't use proxy auth because no authentication schemes are fully configured.");
+        debugs(28, DBG_CRITICAL, "Can't use proxy auth because no authentication schemes are fully configured.");
         return false;
     }
 

=== modified file 'src/auth/digest/auth_digest.cc'
--- src/auth/digest/auth_digest.cc	2012-07-23 15:15:27 +0000
+++ src/auth/digest/auth_digest.cc	2012-08-02 21:18:43 +0000
@@ -322,7 +322,7 @@
     if (nonce->references > 0) {
         -- nonce->references;
     } else {
-        debugs(29, 1, "authDigestNonceUnlink; Attempt to lower nonce " << nonce << " refcount below 0!");
+        debugs(29, DBG_IMPORTANT, "authDigestNonceUnlink; Attempt to lower nonce " << nonce << " refcount below 0!");
     }
 
     debugs(29, 9, "authDigestNonceUnlink: nonce '" << nonce << "' now at '" << nonce->references << "'.");
@@ -667,7 +667,7 @@
     } else if (strcasecmp(param_str, "utf8") == 0) {
         parse_onoff(&utf8);
     } else {
-        debugs(29, 0, "unrecognised digest auth scheme parameter '" << param_str << "'");
+        debugs(29, DBG_CRITICAL, "unrecognised digest auth scheme parameter '" << param_str << "'");
     }
 }
 

=== modified file 'src/auth/negotiate/UserRequest.cc'
--- src/auth/negotiate/UserRequest.cc	2012-07-23 15:15:27 +0000
+++ src/auth/negotiate/UserRequest.cc	2012-08-02 21:10:18 +0000
@@ -203,7 +203,7 @@
         break;
 
     case Auth::Pending:
-        debugs(29, 1, HERE << "need to ask helper");
+        debugs(29, DBG_IMPORTANT, HERE << "need to ask helper");
         break;
 
     case Auth::Handshake:

=== modified file 'src/auth/ntlm/UserRequest.cc'
--- src/auth/ntlm/UserRequest.cc	2012-07-02 12:28:10 +0000
+++ src/auth/ntlm/UserRequest.cc	2012-08-02 21:10:18 +0000
@@ -197,7 +197,7 @@
         break;
 
     case Auth::Pending:
-        debugs(29, 1, HERE << "need to ask helper");
+        debugs(29, DBG_IMPORTANT, HERE << "need to ask helper");
         break;
 
     case Auth::Handshake:

=== modified file 'src/cache_cf.cc'
--- src/cache_cf.cc	2012-07-23 15:34:12 +0000
+++ src/cache_cf.cc	2012-08-02 21:18:43 +0000
@@ -425,7 +425,7 @@
     int err_count = 0;
     int is_pipe = 0;
 
-    debugs(3, 1, "Processing Configuration File: " << file_name << " (depth " << depth << ")");
+    debugs(3, DBG_IMPORTANT, "Processing Configuration File: " << file_name << " (depth " << depth << ")");
     if (depth > 16) {
         fatalf("WARNING: can't include %s: includes are nested too deeply (>16)!\n", file_name);
         return 1;
@@ -537,7 +537,7 @@
             if (tmp_line_len >= 9 && strncmp(tmp_line, "include", 7) == 0 && xisspace(tmp_line[7])) {
                 err_count += parseManyConfigFiles(tmp_line + 8, depth + 1);
             } else if (!parse_line(tmp_line)) {
-                debugs(3, 0, HERE << cfg_filename << ":" << config_lineno << " unrecognized: '" << tmp_line << "'");
+                debugs(3, DBG_CRITICAL, HERE << cfg_filename << ":" << config_lineno << " unrecognized: '" << tmp_line << "'");
                 ++err_count;
             }
         }
@@ -633,7 +633,7 @@
 
 #if SIZEOF_OFF_T <= 4
     if (Config.Store.maxObjectSize > 0x7FFF0000) {
-        debugs(3, 0, "WARNING: This Squid binary can not handle files larger than 2GB. Limiting maximum_object_size to just below 2GB");
+        debugs(3, DBG_CRITICAL, "WARNING: This Squid binary can not handle files larger than 2GB. Limiting maximum_object_size to just below 2GB");
         Config.Store.maxObjectSize = 0x7FFF0000;
     }
 #endif
@@ -642,7 +642,7 @@
         (void) 0;
     else if (Store::Root().maxSize() < Config.memMaxSize)
         /* This is bogus. folk with NULL caches will want this */
-        debugs(3, 0, "WARNING cache_mem is larger than total disk cache space!");
+        debugs(3, DBG_CRITICAL, "WARNING cache_mem is larger than total disk cache space!");
 
     if (Config.Announce.period > 0) {
         Config.onoff.announce = 1;
@@ -744,7 +744,7 @@
             if (!R->flags.override_expire)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'override-expire' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'override-expire' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -753,7 +753,7 @@
             if (!R->flags.override_lastmod)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'override-lastmod' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'override-lastmod' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -762,7 +762,7 @@
             if (!R->flags.reload_into_ims)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'reload-into-ims' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'reload-into-ims' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -771,7 +771,7 @@
             if (!R->flags.ignore_reload)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'ignore-reload' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'ignore-reload' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -780,7 +780,7 @@
             if (!R->flags.ignore_no_cache)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'ignore-no-cache' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'ignore-no-cache' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -789,7 +789,7 @@
             if (!R->flags.ignore_no_store)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'ignore-no-store' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'ignore-no-store' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -797,7 +797,7 @@
         for (R = Config.Refresh; R; R = R->next) {
             if (!R->flags.ignore_must_revalidate)
                 continue;
-            debugs(22, 1, "WARNING: use of 'ignore-must-revalidate' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'ignore-must-revalidate' in 'refresh_pattern' violates HTTP");
             break;
         }
 
@@ -805,7 +805,7 @@
             if (!R->flags.ignore_private)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'ignore-private' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'ignore-private' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -814,7 +814,7 @@
             if (!R->flags.ignore_auth)
                 continue;
 
-            debugs(22, 1, "WARNING: use of 'ignore-auth' in 'refresh_pattern' violates HTTP");
+            debugs(22, DBG_IMPORTANT, "WARNING: use of 'ignore-auth' in 'refresh_pattern' violates HTTP");
 
             break;
         }
@@ -826,7 +826,7 @@
 #else
 
     if (!Config.onoff.via)
-        debugs(22, 1, "WARNING: HTTP requires the use of Via");
+        debugs(22, DBG_IMPORTANT, "WARNING: HTTP requires the use of Via");
 
 #endif
 
@@ -893,13 +893,13 @@
     HttpRequestMethod::Configure(Config);
 #if USE_SSL
 
-    debugs(3, 1, "Initializing https proxy context");
+    debugs(3, DBG_IMPORTANT, "Initializing https proxy context");
 
     Config.ssl_client.sslContext = sslCreateClientContext(Config.ssl_client.cert, Config.ssl_client.key, Config.ssl_client.version, Config.ssl_client.cipher, Config.ssl_client.options, Config.ssl_client.flags, Config.ssl_client.cafile, Config.ssl_client.capath, Config.ssl_client.crlfile);
 
     for (peer *p = Config.peers; p != NULL; p = p->next) {
         if (p->use_ssl) {
-            debugs(3, 1, "Initializing cache_peer " << p->name << " SSL context");
+            debugs(3, DBG_IMPORTANT, "Initializing cache_peer " << p->name << " SSL context");
             p->sslContext = sslCreateClientContext(p->sslcert, p->sslkey, p->sslversion, p->sslcipher, p->ssloptions, p->sslflags, p->sslcafile, p->sslcapath, p->sslcrlfile);
         }
     }
@@ -908,12 +908,12 @@
         if (!s->sslBump)
             continue;
 
-        debugs(3, 1, "Initializing http_port " << s->s << " SSL context");
+        debugs(3, DBG_IMPORTANT, "Initializing http_port " << s->s << " SSL context");
         s->configureSslServerContext();
     }
 
     for (AnyP::PortCfg *s = Config.Sockaddr.https; s != NULL; s = s->next) {
-        debugs(3, 1, "Initializing https_port " << s->s << " SSL context");
+        debugs(3, DBG_IMPORTANT, "Initializing https_port " << s->s << " SSL context");
         s->configureSslServerContext();
     }
 
@@ -987,7 +987,7 @@
     if (0 == d)
         (void) 0;
     else if ((token = strtok(NULL, w_space)) == NULL)
-        debugs(3, 0, "WARNING: No units on '" <<
+        debugs(3, DBG_CRITICAL, "WARNING: No units on '" <<
                config_input_line << "', assuming " <<
                d << " " << units  );
     else if ((m = parseTimeUnits(token, allowMsec)) == 0)
@@ -1029,7 +1029,7 @@
     if (!strncasecmp(unit, T_DECADE_STR, strlen(T_DECADE_STR)))
         return static_cast<uint64_t>(86400 * 1000 * 365.2522 * 10);
 
-    debugs(3, 1, "parseTimeUnits: unknown time unit '" << unit << "'");
+    debugs(3, DBG_IMPORTANT, "parseTimeUnits: unknown time unit '" << unit << "'");
 
     return 0;
 }
@@ -1064,7 +1064,7 @@
     if (0.0 == d)
         (void) 0;
     else if ((token = strtok(NULL, w_space)) == NULL)
-        debugs(3, 0, "WARNING: No units on '" <<
+        debugs(3, DBG_CRITICAL, "WARNING: No units on '" <<
                config_input_line << "', assuming " <<
                d << " " <<  units  );
     else if ((m = parseBytesUnits(token)) == 0) {
@@ -1109,7 +1109,7 @@
     if (0.0 == d)
         (void) 0;
     else if ((token = strtok(NULL, w_space)) == NULL)
-        debugs(3, 0, "WARNING: No units on '" <<
+        debugs(3, DBG_CRITICAL, "WARNING: No units on '" <<
                config_input_line << "', assuming " <<
                d << " " <<  units  );
     else if ((m = parseBytesUnits(token)) == 0) {
@@ -1154,7 +1154,7 @@
     if (0.0 == d)
         (void) 0;
     else if ((token = strtok(NULL, w_space)) == NULL)
-        debugs(3, 0, "WARNING: No units on '" <<
+        debugs(3, DBG_CRITICAL, "WARNING: No units on '" <<
                config_input_line << "', assuming " <<
                d << " " <<  units  );
     else if ((m = parseBytesUnits(token)) == 0) {
@@ -1699,8 +1699,8 @@
     char *t = NULL;
 
     if ((t = strtok(NULL, w_space)) == NULL) {
-        debugs(3, 0, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(3, 0, "parse_http_header_access: missing header name.");
+        debugs(3, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(3, DBG_CRITICAL, "parse_http_header_access: missing header name.");
         return;
     }
 
@@ -1735,8 +1735,8 @@
     char *t = NULL;
 
     if ((t = strtok(NULL, w_space)) == NULL) {
-        debugs(3, 0, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(3, 0, "parse_http_header_replace: missing header name.");
+        debugs(3, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(3, DBG_CRITICAL, "parse_http_header_replace: missing header name.");
         return;
     }
 
@@ -1880,7 +1880,7 @@
             sd = dynamic_cast<SwapDir *>(swap->swapDirs[i].getRaw());
 
             if (strcmp(sd->type(), StoreFileSystem::FileSystems().items[fs]->type()) != 0) {
-                debugs(3, 0, "ERROR: Can't change type of existing cache_dir " <<
+                debugs(3, DBG_CRITICAL, "ERROR: Can't change type of existing cache_dir " <<
                        sd->type() << " " << sd->path << " to " << type_str << ". Restart required");
                 return;
             }
@@ -2283,7 +2283,7 @@
         } else if (strcmp(token, "connection-auth=auto") == 0) {
             p->connection_auth = 2;
         } else {
-            debugs(3, 0, "parse_peer: token='" << token << "'");
+            debugs(3, DBG_CRITICAL, "parse_peer: token='" << token << "'");
             self_destruct();
         }
     }
@@ -2391,7 +2391,7 @@
                 if (strcmp(w->key, u->key))
                     continue;
 
-                debugs(0, 0, "WARNING: action '" << u->key << "' (line " << config_lineno << ") already has a password");
+                debugs(0, DBG_CRITICAL, "WARNING: action '" << u->key << "' (line " << config_lineno << ") already has a password");
             }
         }
     }
@@ -2468,7 +2468,7 @@
         self_destruct();
 
     if ((p = peerFindByName(host)) == NULL) {
-        debugs(15, 0, "" << cfg_filename << ", line " << config_lineno << ": No cache_peer '" << host << "'");
+        debugs(15, DBG_CRITICAL, "" << cfg_filename << ", line " << config_lineno << ": No cache_peer '" << host << "'");
         return;
     }
 
@@ -2490,7 +2490,7 @@
         peer *p;
 
         if ((p = peerFindByName(host)) == NULL) {
-            debugs(15, 0, "" << cfg_filename << ", line " << config_lineno << ": No cache_peer '" << host << "'");
+            debugs(15, DBG_CRITICAL, "" << cfg_filename << ", line " << config_lineno << ": No cache_peer '" << host << "'");
             continue;
         }
 
@@ -2528,7 +2528,7 @@
         peer *p;
 
         if ((p = peerFindByName(host)) == NULL) {
-            debugs(15, 0, "" << cfg_filename << ", line " << config_lineno << ": No cache_peer '" << host << "'");
+            debugs(15, DBG_CRITICAL, "" << cfg_filename << ", line " << config_lineno << ": No cache_peer '" << host << "'");
             return;
         }
 
@@ -2792,14 +2792,14 @@
 #endif
 
         } else
-            debugs(22, 0, "refreshAddToList: Unknown option '" << pattern << "': " << token);
+            debugs(22, DBG_CRITICAL, "refreshAddToList: Unknown option '" << pattern << "': " << token);
     }
 
     if ((errcode = regcomp(&comp, pattern, flags)) != 0) {
         char errbuf[256];
         regerror(errcode, &comp, errbuf, sizeof errbuf);
-        debugs(22, 0, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
-        debugs(22, 0, "refreshAddToList: Invalid regular expression '" << pattern << "': " << errbuf);
+        debugs(22, DBG_CRITICAL, "" << cfg_filename << " line " << config_lineno << ": " << config_input_line);
+        debugs(22, DBG_CRITICAL, "refreshAddToList: Invalid regular expression '" << pattern << "': " << errbuf);
         return;
     }
 
@@ -3372,7 +3372,7 @@
     if (!strcasecmp(s, "multicast"))
         return PEER_MULTICAST;
 
-    debugs(15, 0, "WARNING: Unknown neighbor type: " << s);
+    debugs(15, DBG_CRITICAL, "WARNING: Unknown neighbor type: " << s);
 
     return PEER_SIBLING;
 }
@@ -4005,7 +4005,7 @@
         cl->type = Log::Format::CLF_CUSTOM;
         cl->logFormat = lf;
     } else if (strcmp(logdef_name, "auto") == 0) {
-        debugs(0,0, "WARNING: Log format 'auto' no longer exists. Using 'squid' instead.");
+        debugs(0, DBG_CRITICAL, "WARNING: Log format 'auto' no longer exists. Using 'squid' instead.");
         cl->type = Log::Format::CLF_SQUID;
     } else if (strcmp(logdef_name, "squid") == 0) {
         cl->type = Log::Format::CLF_SQUID;
@@ -4022,7 +4022,7 @@
     } else if (strcmp(logdef_name, "referrer") == 0) {
         cl->type = Log::Format::CLF_REFERER;
     } else {
-        debugs(3, 0, "Log format '" << logdef_name << "' is not defined");
+        debugs(3, DBG_CRITICAL, "Log format '" << logdef_name << "' is not defined");
         self_destruct();
         return;
     }
@@ -4254,7 +4254,7 @@
 static void
 parse_icap_class_type()
 {
-    debugs(93, 0, "WARNING: 'icap_class' is depricated. " <<
+    debugs(93, DBG_CRITICAL, "WARNING: 'icap_class' is depricated. " <<
            "Use 'adaptation_service_set' instead");
     Adaptation::Config::ParseServiceSet();
 }
@@ -4262,7 +4262,7 @@
 static void
 parse_icap_access_type()
 {
-    debugs(93, 0, "WARNING: 'icap_access' is depricated. " <<
+    debugs(93, DBG_CRITICAL, "WARNING: 'icap_access' is depricated. " <<
            "Use 'adaptation_access' instead");
     Adaptation::Config::ParseAccess(LegacyParser);
 }
@@ -4304,7 +4304,7 @@
         return;
 
     if (strcmp(token,"in") != 0) {
-        debugs(3, 0, "expecting 'in' on'"  << config_input_line << "'");
+        debugs(3, DBG_CRITICAL, "expecting 'in' on'"  << config_input_line << "'");
         self_destruct();
     }
 
@@ -4319,7 +4319,7 @@
     if (0 == d)
         (void) 0;
     else if ((token = strtok(NULL, w_space)) == NULL) {
-        debugs(3, 0, "No time-units on '" << config_input_line << "'");
+        debugs(3, DBG_CRITICAL, "No time-units on '" << config_input_line << "'");
         self_destruct();
     } else if ((m = parseTimeUnits(token, false)) == 0)
         self_destruct();

=== modified file 'src/client_db.cc'
--- src/client_db.cc	2012-07-16 09:55:32 +0000
+++ src/client_db.cc	2012-08-02 21:18:43 +0000
@@ -137,7 +137,7 @@
 
     c = (ClientInfo *) hash_lookup(client_table, key);
     if (c==NULL) {
-        debugs(77,1,"Client db does not contain information for given IP address "<<(const char*)key);
+        debugs(77, DBG_IMPORTANT,"Client db does not contain information for given IP address "<<(const char*)key);
         return NULL;
     }
     return c;
@@ -255,12 +255,12 @@
     if (p < 95.0)
         return 0;
 
-    debugs(1, 0, "WARNING: Probable misconfigured neighbor at " << key);
+    debugs(1, DBG_CRITICAL, "WARNING: Probable misconfigured neighbor at " << key);
 
-    debugs(1, 0, "WARNING: " << ND << " of the last " << NR <<
+    debugs(1, DBG_CRITICAL, "WARNING: " << ND << " of the last " << NR <<
            " ICP replies are DENIED");
 
-    debugs(1, 0, "WARNING: No replies will be sent for the next " <<
+    debugs(1, DBG_CRITICAL, "WARNING: No replies will be sent for the next " <<
            CUTOFF_SECONDS << " seconds");
 
     c->cutoff.time = squid_curtime;

=== modified file 'src/client_side.cc'
--- src/client_side.cc	2012-07-23 15:34:12 +0000
+++ src/client_side.cc	2012-08-02 21:10:18 +0000
@@ -802,10 +802,10 @@
     debugs(33, 3, HERE << clientConnection);
 
     if (isOpen())
-        debugs(33, 1, "BUG: ConnStateData did not close " << clientConnection);
+        debugs(33, DBG_IMPORTANT, "BUG: ConnStateData did not close " << clientConnection);
 
     if (!flags.swanSang)
-        debugs(33, 1, "BUG: ConnStateData was not destroyed properly; " << clientConnection);
+        debugs(33, DBG_IMPORTANT, "BUG: ConnStateData was not destroyed properly; " << clientConnection);
 
     cbdataReferenceDone(port);
 
@@ -1200,7 +1200,7 @@
             return 0;		/* entity has no etag to compare with! */
 
         if (spec.tag.weak || rep_tag.weak) {
-            debugs(33, 1, "clientIfRangeMatch: Weak ETags are not allowed in If-Range: " << spec.tag.str << " ? " << rep_tag.str);
+            debugs(33, DBG_IMPORTANT, "clientIfRangeMatch: Weak ETags are not allowed in If-Range: " << spec.tag.str << " ? " << rep_tag.str);
             return 0;		/* must use strong validator for sub-range requests */
         }
 
@@ -2206,7 +2206,7 @@
 
     if (*method_p == METHOD_NONE) {
         /* XXX need a way to say "this many character length string" */
-        debugs(33, 1, "clientParseRequestMethod: Unsupported method in request '" << hp->buf << "'");
+        debugs(33, DBG_IMPORTANT, "clientParseRequestMethod: Unsupported method in request '" << hp->buf << "'");
         hp->request_parse_status = HTTP_METHOD_NOT_ALLOWED;
         return parseHttpRequestAbort(csd, "error:unsupported-request-method");
     }
@@ -3275,7 +3275,7 @@
         static int reported = 0;
 
         if (!reported) {
-            debugs(33, 1, "Notice: httpd_accel_no_pmtu_disc not supported on your platform");
+            debugs(33, DBG_IMPORTANT, "Notice: httpd_accel_no_pmtu_disc not supported on your platform");
             reported = 1;
         }
 #endif
@@ -3459,12 +3459,12 @@
             }
 
         case SSL_ERROR_ZERO_RETURN:
-            debugs(83, 1, "clientNegotiateSSL: Error negotiating SSL connection on FD " << fd << ": Closed by client");
+            debugs(83, DBG_IMPORTANT, "clientNegotiateSSL: Error negotiating SSL connection on FD " << fd << ": Closed by client");
             comm_close(fd);
             return;
 
         default:
-            debugs(83, 1, "clientNegotiateSSL: Error negotiating SSL connection on FD " <<
+            debugs(83, DBG_IMPORTANT, "clientNegotiateSSL: Error negotiating SSL connection on FD " <<
                    fd << ": " << ERR_error_string(ERR_get_error(), NULL) <<
                    " (" << ssl_error << "/" << ret << ")");
             comm_close(fd);
@@ -3678,7 +3678,7 @@
 ConnStateData::sslCrtdHandleReply(const char * reply)
 {
     if (!reply) {
-        debugs(1, 1, HERE << "\"ssl_crtd\" helper return <NULL> reply");
+        debugs(1, DBG_IMPORTANT, HERE << "\"ssl_crtd\" helper return <NULL> reply");
     } else {
         Ssl::CrtdMessage reply_message;
         if (reply_message.parse(reply, strlen(reply)) != Ssl::CrtdMessage::OK) {
@@ -3865,7 +3865,7 @@
     // If generated ssl context = NULL, try to use static ssl context.
     if (!sslContext) {
         if (!port->staticSslContext) {
-            debugs(83, 1, "Closing SSL " << clientConnection->remote << " as lacking SSL context");
+            debugs(83, DBG_IMPORTANT, "Closing SSL " << clientConnection->remote << " as lacking SSL context");
             clientConnection->close();
             return;
         } else {
@@ -3991,8 +3991,8 @@
 
     for (s = Config.Sockaddr.http; s; s = s->next) {
         if (MAXTCPLISTENPORTS == NHttpSockets) {
-            debugs(1, 1, "WARNING: You have too many 'http_port' lines.");
-            debugs(1, 1, "         The limit is " << MAXTCPLISTENPORTS << " HTTP ports.");
+            debugs(1, DBG_IMPORTANT, "WARNING: You have too many 'http_port' lines.");
+            debugs(1, DBG_IMPORTANT, "         The limit is " << MAXTCPLISTENPORTS << " HTTP ports.");
             continue;
         }
 
@@ -4040,13 +4040,13 @@
 
     for (s = Config.Sockaddr.https; s; s = s->next) {
         if (MAXTCPLISTENPORTS == NHttpSockets) {
-            debugs(1, 1, "Ignoring 'https_port' lines exceeding the limit.");
-            debugs(1, 1, "The limit is " << MAXTCPLISTENPORTS << " HTTPS ports.");
+            debugs(1, DBG_IMPORTANT, "Ignoring 'https_port' lines exceeding the limit.");
+            debugs(1, DBG_IMPORTANT, "The limit is " << MAXTCPLISTENPORTS << " HTTPS ports.");
             continue;
         }
 
         if (!s->staticSslContext) {
-            debugs(1, 1, "Ignoring https_port " << s->s <<
+            debugs(1, DBG_IMPORTANT, "Ignoring https_port " << s->s <<
                    " due to SSL initialization failure.");
             continue;
         }
@@ -4101,7 +4101,7 @@
     // TCP: setup a job to handle accept() with subscribed handler
     AsyncJob::Start(new Comm::TcpAcceptor(s->listenConn, FdNote(portTypeNote), sub));
 
-    debugs(1, 1, "Accepting " <<
+    debugs(1, DBG_IMPORTANT, "Accepting " <<
            (s->intercepted ? "NAT intercepted " : "") <<
            (s->spoof_client_ip ? "TPROXY spoofing " : "") <<
            (s->sslBump ? "SSL bumped " : "") <<
@@ -4129,7 +4129,7 @@
 {
     for (AnyP::PortCfg *s = Config.Sockaddr.http; s; s = s->next) {
         if (s->listenConn != NULL) {
-            debugs(1, 1, "Closing HTTP port " << s->listenConn->local);
+            debugs(1, DBG_IMPORTANT, "Closing HTTP port " << s->listenConn->local);
             s->listenConn->close();
             s->listenConn = NULL;
         }
@@ -4138,7 +4138,7 @@
 #if USE_SSL
     for (AnyP::PortCfg *s = Config.Sockaddr.https; s; s = s->next) {
         if (s->listenConn != NULL) {
-            debugs(1, 1, "Closing HTTPS port " << s->listenConn->local);
+            debugs(1, DBG_IMPORTANT, "Closing HTTPS port " << s->listenConn->local);
             s->listenConn->close();
             s->listenConn = NULL;
         }
@@ -4167,7 +4167,7 @@
     if (!has_vary || !entry->mem_obj->vary_headers) {
         if (vary) {
             /* Oops... something odd is going on here.. */
-            debugs(33, 1, "varyEvaluateMatch: Oops. Not a Vary object on second attempt, '" <<
+            debugs(33, DBG_IMPORTANT, "varyEvaluateMatch: Oops. Not a Vary object on second attempt, '" <<
                    entry->mem_obj->url << "' '" << vary << "'");
             safe_free(request->vary_headers);
             return VARY_CANCEL;
@@ -4209,7 +4209,7 @@
             /* Oops.. we have already been here and still haven't
              * found the requested variant. Bail out
              */
-            debugs(33, 1, "varyEvaluateMatch: Oops. Not a Vary match on second attempt, '" <<
+            debugs(33, DBG_IMPORTANT, "varyEvaluateMatch: Oops. Not a Vary match on second attempt, '" <<
                    entry->mem_obj->url << "' '" << vary << "'");
             return VARY_CANCEL;
         }

=== modified file 'src/client_side.h'
--- src/client_side.h	2012-07-19 00:12:22 +0000
+++ src/client_side.h	2012-08-04 12:11:57 +0000
@@ -147,7 +147,6 @@
     void wroteControlMsg(const Comm::ConnectionPointer &conn, char *bufnotused, size_t size, comm_err_t errflag, int xerrno);
 
 private:
-    CBDATA_CLASS(ClientSocketContext);
     void prepareReply(HttpReply * rep);
     void packChunk(const StoreIOBuffer &bodyData, MemBuf &mb);
     void packRange(StoreIOBuffer const &, MemBuf * mb);
@@ -159,6 +158,7 @@
 
     bool mayUseConnection_; /* This request may use the connection. Don't read anymore requests for now */
     bool connRegistered_;
+    CBDATA_CLASS(ClientSocketContext);
 };
 
 
@@ -380,7 +380,6 @@
     HttpParser parser_;
 
     // XXX: CBDATA plays with public/private and leaves the following 'private' fields all public... :(
-    CBDATA_CLASS2(ConnStateData);
 
 #if USE_SSL
     bool switchedToHttps_;
@@ -401,6 +400,7 @@
 
     AsyncCall::Pointer reader; ///< set when we are reading
     BodyPipe::Pointer bodyPipe; // set when we are reading request body
+    CBDATA_CLASS2(ConnStateData);
 };
 
 /* convenience class while splitting up body handling */

=== modified file 'src/client_side_reply.cc'
--- src/client_side_reply.cc	2012-07-22 03:15:02 +0000
+++ src/client_side_reply.cc	2012-08-02 21:18:43 +0000
@@ -300,7 +300,7 @@
     /* Register with storage manager to receive updates when data comes in. */
 
     if (EBIT_TEST(entry->flags, ENTRY_ABORTED))
-        debugs(88, 0, "clientReplyContext::processExpired: Found ENTRY_ABORTED object");
+        debugs(88, DBG_CRITICAL, "clientReplyContext::processExpired: Found ENTRY_ABORTED object");
 
     {
         /* start counting the length from 0 */
@@ -493,7 +493,7 @@
     assert(http->logType == LOG_TCP_HIT);
 
     if (strcmp(e->mem_obj->url, urlCanonical(r)) != 0) {
-        debugs(33, 1, "clientProcessHit: URL mismatch, '" << e->mem_obj->url << "' != '" << urlCanonical(r) << "'");
+        debugs(33, DBG_IMPORTANT, "clientProcessHit: URL mismatch, '" << e->mem_obj->url << "' != '" << urlCanonical(r) << "'");
         processMiss();
         return;
     }
@@ -524,7 +524,7 @@
 
     case VARY_CANCEL:
         /* varyEvaluateMatch found a object loop. Process as miss */
-        debugs(88, 1, "clientProcessHit: Vary object loop!");
+        debugs(88, DBG_IMPORTANT, "clientProcessHit: Vary object loop!");
         processMiss();
         return;
     }
@@ -623,8 +623,8 @@
      */
     if (http->storeEntry()) {
         if (EBIT_TEST(http->storeEntry()->flags, ENTRY_SPECIAL)) {
-            debugs(88, 0, "clientProcessMiss: miss on a special object (" << url << ").");
-            debugs(88, 0, "\tlog_type = " << Format::log_tags[http->logType]);
+            debugs(88, DBG_CRITICAL, "clientProcessMiss: miss on a special object (" << url << ").");
+            debugs(88, DBG_CRITICAL, "\tlog_type = " << Format::log_tags[http->logType]);
             http->storeEntry()->dump(1);
         }
 
@@ -1120,18 +1120,18 @@
 {
 #if SIZEOF_INT64_T == 4
     if (http->out.size > 0x7FFF0000) {
-        debugs(88, 1, "WARNING: closing FD " << fd << " to prevent out.size counter overflow");
-        debugs(88, 1, "\tclient " << http->getConn()->peer);
-        debugs(88, 1, "\treceived " << http->out.size << " bytes");
-        debugs(88, 1, "\tURI " << http->log_uri);
+        debugs(88, DBG_IMPORTANT, "WARNING: closing FD " << fd << " to prevent out.size counter overflow");
+        debugs(88, DBG_IMPORTANT, "\tclient " << http->getConn()->peer);
+        debugs(88, DBG_IMPORTANT, "\treceived " << http->out.size << " bytes");
+        debugs(88, DBG_IMPORTANT, "\tURI " << http->log_uri);
         return 1;
     }
 
     if (http->out.offset > 0x7FFF0000) {
-        debugs(88, 1, "WARNING: closing FD " << fd < " to prevent out.offset counter overflow");
-        debugs(88, 1, "\tclient " << http->getConn()->peer);
-        debugs(88, 1, "\treceived " << http->out.size << " bytes, offset " << http->out.offset);
-        debugs(88, 1, "\tURI " << http->log_uri);
+        debugs(88, DBG_IMPORTANT, "WARNING: closing FD " << fd < " to prevent out.offset counter overflow");
+        debugs(88, DBG_IMPORTANT, "\tclient " << http->getConn()->peer);
+        debugs(88, DBG_IMPORTANT, "\treceived " << http->out.size << " bytes, offset " << http->out.offset);
+        debugs(88, DBG_IMPORTANT, "\tURI " << http->log_uri);
         return 1;
     }
 

=== modified file 'src/client_side_reply.h'
--- src/client_side_reply.h	2012-06-19 21:51:49 +0000
+++ src/client_side_reply.h	2012-08-04 12:11:57 +0000
@@ -120,7 +120,6 @@
     clientStreamNode *ourNode;	/* This will go away if/when this file gets refactored some more */
 
 private:
-    CBDATA_CLASS(clientReplyContext);
     clientStreamNode *getNextNode() const;
     void makeThisHead();
     bool errorInStream(StoreIOBuffer const &result, size_t const &sizeToProcess)const ;
@@ -153,6 +152,7 @@
     StoreEntry *old_entry;
     store_client *old_sc;	/* ... for entry to be validated */
     bool deleting;
+    CBDATA_CLASS(clientReplyContext);
 };
 
 #endif /* SQUID_CLIENTSIDEREPLY_H */

=== modified file 'src/client_side_request.h'
--- src/client_side_request.h	2012-07-18 16:21:47 +0000
+++ src/client_side_request.h	2012-08-04 12:11:57 +0000
@@ -148,7 +148,6 @@
 #endif
 
 private:
-    CBDATA_CLASS(ClientHttpRequest);
     int64_t maxReplyBodySize_;
     StoreEntry *entry_;
     StoreEntry *loggingEntry_;
@@ -200,6 +199,8 @@
     bool request_satisfaction_mode;
     int64_t request_satisfaction_offset;
 #endif
+private:
+    CBDATA_CLASS(ClientHttpRequest);
 };
 
 /* client http based routines */

=== modified file 'src/comm.cc'
--- src/comm.cc	2012-07-17 17:38:50 +0000
+++ src/comm.cc	2012-08-02 21:10:18 +0000
@@ -385,7 +385,7 @@
     temp.InitAddrInfo(addr);
 
     if (getsockname(fd, addr->ai_addr, &(addr->ai_addrlen)) ) {
-        debugs(50, 1, "comm_local_port: Failed to retrieve TCP/UDP port number for socket: FD " << fd << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "comm_local_port: Failed to retrieve TCP/UDP port number for socket: FD " << fd << ": " << xstrerror());
         temp.FreeAddrInfo(addr);
         return 0;
     }
@@ -475,7 +475,7 @@
 {
 #ifdef IPV6_V6ONLY
     if (setsockopt(fd, IPPROTO_IPV6, IPV6_V6ONLY, (char *) &tos, sizeof(int)) < 0) {
-        debugs(50, 1, "comm_open: setsockopt(IPV6_V6ONLY) " << (tos?"ON":"OFF") << " for FD " << fd << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "comm_open: setsockopt(IPV6_V6ONLY) " << (tos?"ON":"OFF") << " for FD " << fd << ": " << xstrerror());
     }
 #else
     debugs(50, 0, "WARNING: comm_open: setsockopt(IPV6_V6ONLY) not supported on this platform");
@@ -661,7 +661,7 @@
 
     if ( (flags & COMM_DOBIND) || addr.GetPort() > 0 || !addr.IsAnyAddr() ) {
         if ( !(flags & COMM_DOBIND) && addr.IsAnyAddr() )
-            debugs(5,1,"WARNING: Squid is attempting to bind() port " << addr << " without being a listener.");
+            debugs(5, DBG_IMPORTANT,"WARNING: Squid is attempting to bind() port " << addr << " without being a listener.");
         if ( addr.IsNoAddr() )
             debugs(5,0,"CRITICAL: Squid is attempting to bind() port " << addr << "!!");
 
@@ -915,9 +915,9 @@
     F->remote_port = address.GetPort(); /* remote_port is HS */
 
     if (status == COMM_OK) {
-        debugs(5, 10, "comm_connect_addr: FD " << sock << " connected to " << address);
+        debugs(5, DBG_DATA, "comm_connect_addr: FD " << sock << " connected to " << address);
     } else if (status == COMM_INPROGRESS) {
-        debugs(5, 10, "comm_connect_addr: FD " << sock << " connection pending");
+        debugs(5, DBG_DATA, "comm_connect_addr: FD " << sock << " connection pending");
     }
 
     return status;
@@ -1192,7 +1192,7 @@
     if (ECONNREFUSED != errno)
 #endif
 
-        debugs(50, 1, "comm_udp_sendto: FD " << fd << ", (family=" << fd_table[fd].sock_family << ") " << to_addr << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "comm_udp_sendto: FD " << fd << ", (family=" << fd_table[fd].sock_family << ") " << to_addr << ": " << xstrerror());
 
     return COMM_ERROR;
 }
@@ -1288,19 +1288,19 @@
     int on = 1;
 
     if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof(on)) < 0)
-        debugs(50, 1, "commSetReuseAddr: FD " << fd << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "commSetReuseAddr: FD " << fd << ": " << xstrerror());
 }
 
 static void
 commSetTcpRcvbuf(int fd, int size)
 {
     if (setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char *) &size, sizeof(size)) < 0)
-        debugs(50, 1, "commSetTcpRcvbuf: FD " << fd << ", SIZE " << size << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "commSetTcpRcvbuf: FD " << fd << ", SIZE " << size << ": " << xstrerror());
     if (setsockopt(fd, SOL_SOCKET, SO_SNDBUF, (char *) &size, sizeof(size)) < 0)
-        debugs(50, 1, "commSetTcpRcvbuf: FD " << fd << ", SIZE " << size << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "commSetTcpRcvbuf: FD " << fd << ", SIZE " << size << ": " << xstrerror());
 #ifdef TCP_WINDOW_CLAMP
     if (setsockopt(fd, SOL_TCP, TCP_WINDOW_CLAMP, (char *) &size, sizeof(size)) < 0)
-        debugs(50, 1, "commSetTcpRcvbuf: FD " << fd << ", SIZE " << size << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "commSetTcpRcvbuf: FD " << fd << ", SIZE " << size << ": " << xstrerror());
 #endif
 }
 
@@ -1401,7 +1401,7 @@
     int on = 1;
 
     if (setsockopt(fd, IPPROTO_TCP, TCP_NODELAY, (char *) &on, sizeof(on)) < 0)
-        debugs(50, 1, "commSetTcpNoDelay: FD " << fd << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "commSetTcpNoDelay: FD " << fd << ": " << xstrerror());
 
     fd_table[fd].flags.nodelay = 1;
 }
@@ -1416,23 +1416,23 @@
     if (timeout && interval) {
         int count = (timeout + interval - 1) / interval;
         if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPCNT, &count, sizeof(on)) < 0)
-            debugs(5, 1, "commSetKeepalive: FD " << fd << ": " << xstrerror());
+            debugs(5, DBG_IMPORTANT, "commSetKeepalive: FD " << fd << ": " << xstrerror());
     }
 #endif
 #ifdef TCP_KEEPIDLE
     if (idle) {
         if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPIDLE, &idle, sizeof(on)) < 0)
-            debugs(5, 1, "commSetKeepalive: FD " << fd << ": " << xstrerror());
+            debugs(5, DBG_IMPORTANT, "commSetKeepalive: FD " << fd << ": " << xstrerror());
     }
 #endif
 #ifdef TCP_KEEPINTVL
     if (interval) {
         if (setsockopt(fd, IPPROTO_TCP, TCP_KEEPINTVL, &interval, sizeof(on)) < 0)
-            debugs(5, 1, "commSetKeepalive: FD " << fd << ": " << xstrerror());
+            debugs(5, DBG_IMPORTANT, "commSetKeepalive: FD " << fd << ": " << xstrerror());
     }
 #endif
     if (setsockopt(fd, SOL_SOCKET, SO_KEEPALIVE, (char *) &on, sizeof(on)) < 0)
-        debugs(5, 1, "commSetKeepalive: FD " << fd << ": " << xstrerror());
+        debugs(5, DBG_IMPORTANT, "commSetKeepalive: FD " << fd << ": " << xstrerror());
 }
 
 void

=== modified file 'src/comm/Connection.cc'
--- src/comm/Connection.cc	2012-07-10 15:44:23 +0000
+++ src/comm/Connection.cc	2012-08-02 21:18:43 +0000
@@ -27,8 +27,8 @@
 Comm::Connection::~Connection()
 {
     if (fd >= 0) {
-        debugs(5, 0, "BUG: Orphan Comm::Connection: " << *this);
-        debugs(5, 0, "NOTE: " << ++lost_conn << " Orphans since last started.");
+        debugs(5, DBG_CRITICAL, "BUG: Orphan Comm::Connection: " << *this);
+        debugs(5, DBG_CRITICAL, "NOTE: " << ++lost_conn << " Orphans since last started.");
         close();
     }
 

=== modified file 'src/comm/ModKqueue.cc'
--- src/comm/ModKqueue.cc	2012-07-02 12:37:13 +0000
+++ src/comm/ModKqueue.cc	2012-08-02 21:10:18 +0000
@@ -316,7 +316,7 @@
 
         default:
             /* Bad! -- adrian */
-            debugs(5, 1, "comm_select: kevent returned " << ke[i].filter << "!");
+            debugs(5, DBG_IMPORTANT, "comm_select: kevent returned " << ke[i].filter << "!");
             break;
         }
     }

=== modified file 'src/comm/ModPoll.cc'
--- src/comm/ModPoll.cc	2012-07-06 10:18:43 +0000
+++ src/comm/ModPoll.cc	2012-08-02 21:18:43 +0000
@@ -259,7 +259,7 @@
                 fd_table[fd].read_handler = NULL;
                 hdl(fd, fd_table[fd].read_data);
             } else if (pfds[i].events & POLLRDNORM)
-                debugs(5, 1, "comm_poll_incoming: FD " << fd << " NULL read handler");
+                debugs(5, DBG_IMPORTANT, "comm_poll_incoming: FD " << fd << " NULL read handler");
         }
 
         if (revents & (POLLWRNORM | POLLOUT | POLLHUP | POLLERR)) {
@@ -267,7 +267,7 @@
                 fd_table[fd].write_handler = NULL;
                 hdl(fd, fd_table[fd].write_data);
             } else if (pfds[i].events & POLLWRNORM)
-                debugs(5, 1, "comm_poll_incoming: FD " << fd << " NULL write_handler");
+                debugs(5, DBG_IMPORTANT, "comm_poll_incoming: FD " << fd << " NULL write_handler");
         }
     }
 
@@ -441,7 +441,7 @@
             if (ignoreErrno(errno))
                 continue;
 
-            debugs(5, 0, "comm_poll: poll failure: " << xstrerror());
+            debugs(5, DBG_CRITICAL, "comm_poll: poll failure: " << xstrerror());
 
             assert(errno != EINVAL);
 
@@ -539,19 +539,19 @@
 
             if (revents & POLLNVAL) {
                 AsyncCall::Pointer ch;
-                debugs(5, 0, "WARNING: FD " << fd << " has handlers, but it's invalid.");
-                debugs(5, 0, "FD " << fd << " is a " << fdTypeStr[F->type]);
-                debugs(5, 0, "--> " << F->desc);
-                debugs(5, 0, "tmout:" << F->timeoutHandler << "read:" <<
+                debugs(5, DBG_CRITICAL, "WARNING: FD " << fd << " has handlers, but it's invalid.");
+                debugs(5, DBG_CRITICAL, "FD " << fd << " is a " << fdTypeStr[F->type]);
+                debugs(5, DBG_CRITICAL, "--> " << F->desc);
+                debugs(5, DBG_CRITICAL, "tmout:" << F->timeoutHandler << "read:" <<
                        F->read_handler << " write:" << F->write_handler);
 
                 for (ch = F->closeHandler; ch != NULL; ch = ch->Next())
-                    debugs(5, 0, " close handler: " << ch);
+                    debugs(5, DBG_CRITICAL, " close handler: " << ch);
 
                 if (F->closeHandler != NULL) {
                     commCallCloseHandlers(fd);
                 } else if (F->timeoutHandler != NULL) {
-                    debugs(5, 0, "comm_poll: Calling Timeout Handler");
+                    debugs(5, DBG_CRITICAL, "comm_poll: Calling Timeout Handler");
                     ScheduleCallHere(F->timeoutHandler);
                 }
 

=== modified file 'src/comm/ModSelect.cc'
--- src/comm/ModSelect.cc	2012-07-06 12:19:11 +0000
+++ src/comm/ModSelect.cc	2012-08-02 21:18:43 +0000
@@ -252,7 +252,7 @@
                 commUpdateReadBits(fd, NULL);
                 hdl(fd, fd_table[fd].read_data);
             } else {
-                debugs(5, 1, "comm_select_incoming: FD " << fd << " NULL read handler");
+                debugs(5, DBG_IMPORTANT, "comm_select_incoming: FD " << fd << " NULL read handler");
             }
         }
 
@@ -262,7 +262,7 @@
                 commUpdateWriteBits(fd, NULL);
                 hdl(fd, fd_table[fd].write_data);
             } else {
-                debugs(5, 1, "comm_select_incoming: FD " << fd << " NULL write handler");
+                debugs(5, DBG_IMPORTANT, "comm_select_incoming: FD " << fd << " NULL write handler");
             }
         }
     }
@@ -459,7 +459,7 @@
             if (ignoreErrno(errno))
                 break;
 
-            debugs(5, 0, "comm_select: select failure: " << xstrerror());
+            debugs(5, DBG_CRITICAL, "comm_select: select failure: " << xstrerror());
 
             examine_select(&readfds, &writefds);
 
@@ -708,7 +708,7 @@
     fde *F = NULL;
 
     struct stat sb;
-    debugs(5, 0, "examine_select: Examining open file descriptors...");
+    debugs(5, DBG_CRITICAL, "examine_select: Examining open file descriptors...");
 
     for (fd = 0; fd < Squid_MaxFD; ++fd) {
         FD_ZERO(&read_x);
@@ -731,18 +731,18 @@
         }
 
         F = &fd_table[fd];
-        debugs(5, 0, "FD " << fd << ": " << xstrerror());
-        debugs(5, 0, "WARNING: FD " << fd << " has handlers, but it's invalid.");
-        debugs(5, 0, "FD " << fd << " is a " << fdTypeStr[F->type] << " called '" << F->desc << "'");
-        debugs(5, 0, "tmout:" << F->timeoutHandler << " read:" << F->read_handler << " write:" << F->write_handler);
+        debugs(5, DBG_CRITICAL, "FD " << fd << ": " << xstrerror());
+        debugs(5, DBG_CRITICAL, "WARNING: FD " << fd << " has handlers, but it's invalid.");
+        debugs(5, DBG_CRITICAL, "FD " << fd << " is a " << fdTypeStr[F->type] << " called '" << F->desc << "'");
+        debugs(5, DBG_CRITICAL, "tmout:" << F->timeoutHandler << " read:" << F->read_handler << " write:" << F->write_handler);
 
         for (ch = F->closeHandler; ch != NULL; ch = ch->Next())
-            debugs(5, 0, " close handler: " << ch);
+            debugs(5, DBG_CRITICAL, " close handler: " << ch);
 
         if (F->closeHandler != NULL) {
             commCallCloseHandlers(fd);
         } else if (F->timeoutHandler != NULL) {
-            debugs(5, 0, "examine_select: Calling Timeout Handler");
+            debugs(5, DBG_CRITICAL, "examine_select: Calling Timeout Handler");
             ScheduleCallHere(F->timeoutHandler);
         }
 

=== modified file 'src/comm/ModSelectWin32.cc'
--- src/comm/ModSelectWin32.cc	2012-07-23 19:37:47 +0000
+++ src/comm/ModSelectWin32.cc	2012-08-02 21:18:43 +0000
@@ -255,7 +255,7 @@
                 commUpdateReadBits(fd, NULL);
                 hdl(fd, fd_table[fd].read_data);
             } else {
-                debugs(5, 1, "comm_select_incoming: FD " << fd << " NULL read handler");
+                debugs(5, DBG_IMPORTANT, "comm_select_incoming: FD " << fd << " NULL read handler");
             }
         }
 
@@ -265,7 +265,7 @@
                 commUpdateWriteBits(fd, NULL);
                 hdl(fd, fd_table[fd].write_data);
             } else {
-                debugs(5, 1, "comm_select_incoming: FD " << fd << " NULL write handler");
+                debugs(5, DBG_IMPORTANT, "comm_select_incoming: FD " << fd << " NULL write handler");
             }
         }
     }
@@ -459,7 +459,7 @@
             if (ignoreErrno(errno))
                 break;
 
-            debugs(5, 0, "comm_select: select failure: " << xstrerror());
+            debugs(5, DBG_CRITICAL, "comm_select: select failure: " << xstrerror());
 
             examine_select(&readfds, &writefds);
 
@@ -728,7 +728,7 @@
     fde *F = NULL;
 
     struct stat sb;
-    debugs(5, 0, "examine_select: Examining open file descriptors...");
+    debugs(5, DBG_CRITICAL, "examine_select: Examining open file descriptors...");
 
     for (fd = 0; fd < Squid_MaxFD; ++fd) {
         FD_ZERO(&read_x);
@@ -751,18 +751,18 @@
         }
 
         F = &fd_table[fd];
-        debugs(5, 0, "FD " << fd << ": " << xstrerror());
-        debugs(5, 0, "WARNING: FD " << fd << " has handlers, but it's invalid.");
-        debugs(5, 0, "FD " << fd << " is a " << fdTypeStr[F->type] << " called '" << F->desc << "'");
-        debugs(5, 0, "tmout:" << F->timeoutHandler << " read:" << F->read_handler << " write:" << F->write_handler);
+        debugs(5, DBG_CRITICAL, "FD " << fd << ": " << xstrerror());
+        debugs(5, DBG_CRITICAL, "WARNING: FD " << fd << " has handlers, but it's invalid.");
+        debugs(5, DBG_CRITICAL, "FD " << fd << " is a " << fdTypeStr[F->type] << " called '" << F->desc << "'");
+        debugs(5, DBG_CRITICAL, "tmout:" << F->timeoutHandler << " read:" << F->read_handler << " write:" << F->write_handler);
 
         for (ch = F->closeHandler; ch != NULL; ch = ch->Next())
-            debugs(5, 0, " close handler: " << ch);
+            debugs(5, DBG_CRITICAL, " close handler: " << ch);
 
         if (F->closeHandler != NULL) {
             commCallCloseHandlers(fd);
         } else if (F->timeoutHandler != NULL) {
-            debugs(5, 0, "examine_select: Calling Timeout Handler");
+            debugs(5, DBG_CRITICAL, "examine_select: Calling Timeout Handler");
             ScheduleCallHere(F->timeoutHandler);
         }
 

=== modified file 'src/comm/TcpAcceptor.cc'
--- src/comm/TcpAcceptor.cc	2012-01-20 18:55:04 +0000
+++ src/comm/TcpAcceptor.cc	2012-08-02 21:10:18 +0000
@@ -317,7 +317,7 @@
             debugs(50, 3, HERE << status() << ": " << xstrerror());
             return COMM_ERROR;
         } else {
-            debugs(50, 1, HERE << status() << ": " << xstrerror());
+            debugs(50, DBG_IMPORTANT, HERE << status() << ": " << xstrerror());
             return COMM_ERROR;
         }
     }

=== modified file 'src/comm/Write.cc'
--- src/comm/Write.cc	2012-01-20 18:55:04 +0000
+++ src/comm/Write.cc	2012-08-02 21:10:18 +0000
@@ -98,7 +98,7 @@
             /* we wrote data - drain them from bucket */
             clientInfo->bucketSize -= len;
             if (clientInfo->bucketSize < 0.0) {
-                debugs(5,1, HERE << "drained too much"); // should not happen
+                debugs(5, DBG_IMPORTANT, HERE << "drained too much"); // should not happen
                 clientInfo->bucketSize = 0;
             }
         }

=== modified file 'src/debug.cc'
--- src/debug.cc	2012-07-20 15:31:04 +0000
+++ src/debug.cc	2012-08-02 21:18:43 +0000
@@ -561,7 +561,7 @@
 void
 xassert(const char *msg, const char *file, int line)
 {
-    debugs(0, 0, "assertion failed: " << file << ":" << line << ": \"" << msg << "\"");
+    debugs(0, DBG_CRITICAL, "assertion failed: " << file << ":" << line << ": \"" << msg << "\"");
 
     if (!shutting_down)
         abort();
@@ -670,7 +670,7 @@
         Ctx_Descrs[Ctx_Current_Level] = descr;
 
     if (Ctx_Current_Level == Ctx_Warn_Level) {
-        debugs(0, 0, "# ctx: suspiciously deep (" << Ctx_Warn_Level << ") nesting:");
+        debugs(0, DBG_CRITICAL, "# ctx: suspiciously deep (" << Ctx_Warn_Level << ") nesting:");
         Ctx_Warn_Level *= 2;
     }
 

=== modified file 'src/delay_pools.cc'
--- src/delay_pools.cc	2012-07-17 17:38:50 +0000
+++ src/delay_pools.cc	2012-08-02 21:18:43 +0000
@@ -672,7 +672,7 @@
 DelayPools::pools(unsigned short newPools)
 {
     if (pools()) {
-        debugs(3, 0, "parse_delay_pool_count: multiple delay_pools lines, aborting all previous delay_pools config");
+        debugs(3, DBG_CRITICAL, "parse_delay_pool_count: multiple delay_pools lines, aborting all previous delay_pools config");
         FreePools();
     }
 

=== modified file 'src/disk.cc'
--- src/disk.cc	2012-07-17 17:38:50 +0000
+++ src/disk.cc	2012-08-02 21:10:18 +0000
@@ -254,7 +254,7 @@
     if (len < 0) {
         if (!ignoreErrno(errno)) {
             status = errno == ENOSPC ? DISK_NO_SPACE_LEFT : DISK_ERROR;
-            debugs(50, 1, "diskHandleWrite: FD " << fd << ": disk write error: " << xstrerror());
+            debugs(50, DBG_IMPORTANT, "diskHandleWrite: FD " << fd << ": disk write error: " << xstrerror());
 
             /*
              * If there is no write callback, then this file is
@@ -299,7 +299,7 @@
         q->buf_offset += len;
 
         if (q->buf_offset > q->len)
-            debugs(50, 1, "diskHandleWriteComplete: q->buf_offset > q->len (" <<
+            debugs(50, DBG_IMPORTANT, "diskHandleWriteComplete: q->buf_offset > q->len (" <<
                    q << "," << (int) q->buf_offset << ", " << q->len << ", " <<
                    len << " FD " << fd << ")");
 
@@ -464,7 +464,7 @@
             return;
         }
 
-        debugs(50, 1, "diskHandleRead: FD " << fd << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "diskHandleRead: FD " << fd << ": " << xstrerror());
         len = 0;
         rc = DISK_ERROR;
     } else if (len == 0) {
@@ -510,7 +510,7 @@
     ++ statCounter.syscalls.disk.unlinks;
 
     if (unlink(s) < 0 && !quiet)
-        debugs(50, 1, "safeunlink: Couldn't delete " << s << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "safeunlink: Couldn't delete " << s << ": " << xstrerror());
 }
 
 /*

=== modified file 'src/dns.cc'
--- src/dns.cc	2012-01-20 18:55:04 +0000
+++ src/dns.cc	2012-08-02 21:10:18 +0000
@@ -128,7 +128,7 @@
         if (squid_curtime - first_warn > 3 * 60)
             fatal("DNS servers not responding for 3 minutes");
 
-        debugs(34, 1, "dnsSubmit: queue overload, rejecting " << lookup);
+        debugs(34, DBG_IMPORTANT, "dnsSubmit: queue overload, rejecting " << lookup);
 
         callback(data, (char *)"$fail Temporary network problem, please retry later");
 

=== modified file 'src/dns_internal.cc'
--- src/dns_internal.cc	2012-07-20 15:31:04 +0000
+++ src/dns_internal.cc	2012-08-02 21:18:43 +0000
@@ -258,14 +258,14 @@
     Ip::Address A;
 
     if (!(A = buf)) {
-        debugs(78, 0, "WARNING: rejecting '" << buf << "' as a name server, because it is not a numeric IP address");
+        debugs(78, DBG_CRITICAL, "WARNING: rejecting '" << buf << "' as a name server, because it is not a numeric IP address");
         return;
     }
 
     if (A.IsAnyAddr()) {
-        debugs(78, 0, "WARNING: Squid does not accept " << A << " in DNS server specifications.");
+        debugs(78, DBG_CRITICAL, "WARNING: Squid does not accept " << A << " in DNS server specifications.");
         A.SetLocalhost();
-        debugs(78, 0, "Will be using " << A << " instead, assuming you meant that DNS is running on the same machine");
+        debugs(78, DBG_CRITICAL, "Will be using " << A << " instead, assuming you meant that DNS is running on the same machine");
     }
 
     if (!Ip::EnableIpv6 && !A.SetIPv4()) {
@@ -353,7 +353,7 @@
     wordlist *w;
 
     for (w = Config.dns_nameservers; w; w = w->next) {
-        debugs(78, 1, "Adding nameserver " << w->key << " from squid.conf");
+        debugs(78, DBG_IMPORTANT, "Adding nameserver " << w->key << " from squid.conf");
         idnsAddNameserver(w->key);
     }
 }
@@ -368,7 +368,7 @@
     fp = fopen(_PATH_RESCONF, "r");
 
     if (fp == NULL) {
-        debugs(78, 1, "" << _PATH_RESCONF << ": " << xstrerror());
+        debugs(78, DBG_IMPORTANT, "" << _PATH_RESCONF << ": " << xstrerror());
         return;
     }
 
@@ -387,7 +387,7 @@
             if (NULL == t)
                 continue;
 
-            debugs(78, 1, "Adding nameserver " << t << " from " << _PATH_RESCONF);
+            debugs(78, DBG_IMPORTANT, "Adding nameserver " << t << " from " << _PATH_RESCONF);
 
             idnsAddNameserver(t);
         } else if (strcasecmp(t, "domain") == 0) {
@@ -397,7 +397,7 @@
             if (NULL == t)
                 continue;
 
-            debugs(78, 1, "Adding domain " << t << " from " << _PATH_RESCONF);
+            debugs(78, DBG_IMPORTANT, "Adding domain " << t << " from " << _PATH_RESCONF);
 
             idnsAddPathComponent(t);
         } else if (strcasecmp(t, "search") == 0) {
@@ -408,7 +408,7 @@
                 if (NULL == t)
                     continue;
 
-                debugs(78, 1, "Adding domain " << t << " from " << _PATH_RESCONF);
+                debugs(78, DBG_IMPORTANT, "Adding domain " << t << " from " << _PATH_RESCONF);
 
                 idnsAddPathComponent(t);
             }
@@ -425,7 +425,7 @@
                     if (ndots < 1)
                         ndots = 1;
 
-                    debugs(78, 1, "Adding ndots " << ndots << " from " << _PATH_RESCONF);
+                    debugs(78, DBG_IMPORTANT, "Adding ndots " << ndots << " from " << _PATH_RESCONF);
                 }
             }
         }
@@ -458,7 +458,7 @@
         if (Result == ERROR_SUCCESS && Size) {
             t = (char *) xmalloc(Size);
             RegQueryValueEx(hndKey, "Domain", NULL, &Type, (LPBYTE) t, &Size);
-            debugs(78, 1, "Adding domain " << t << " from Registry");
+            debugs(78, DBG_IMPORTANT, "Adding domain " << t << " from Registry");
             idnsAddPathComponent(t);
             xfree(t);
         }
@@ -471,7 +471,7 @@
 
             while (token) {
                 idnsAddPathComponent(token);
-                debugs(78, 1, "Adding domain " << token << " from Registry");
+                debugs(78, DBG_IMPORTANT, "Adding domain " << token << " from Registry");
                 token = strtok(NULL, Separator);
             }
             xfree(t);
@@ -511,7 +511,7 @@
 
                 while (token) {
                     idnsAddNameserver(token);
-                    debugs(78, 1, "Adding DHCP nameserver " << token << " from Registry");
+                    debugs(78, DBG_IMPORTANT, "Adding DHCP nameserver " << token << " from Registry");
                     token = strtok(NULL, ",");
                 }
                 xfree(t);
@@ -525,7 +525,7 @@
                 token = strtok(t, ", ");
 
                 while (token) {
-                    debugs(78, 1, "Adding nameserver " << token << " from Registry");
+                    debugs(78, DBG_IMPORTANT, "Adding nameserver " << token << " from Registry");
                     idnsAddNameserver(token);
                     token = strtok(NULL, ", ");
                 }
@@ -578,7 +578,7 @@
                                 RegQueryValueEx(hndKey2, "DhcpNameServer", NULL, &Type, (LPBYTE)t, &Size);
                                 token = strtok(t, ", ");
                                 while (token) {
-                                    debugs(78, 1, "Adding DHCP nameserver " << token << " from Registry");
+                                    debugs(78, DBG_IMPORTANT, "Adding DHCP nameserver " << token << " from Registry");
                                     idnsAddNameserver(token);
                                     token = strtok(NULL, ", ");
                                 }
@@ -591,7 +591,7 @@
                                 RegQueryValueEx(hndKey2, "NameServer", NULL, &Type, (LPBYTE)t, &Size);
                                 token = strtok(t, ", ");
                                 while (token) {
-                                    debugs(78, 1, "Adding nameserver " << token << " from Registry");
+                                    debugs(78, DBG_IMPORTANT, "Adding nameserver " << token << " from Registry");
                                     idnsAddNameserver(token);
                                     token = strtok(NULL, ", ");
                                 }
@@ -635,7 +635,7 @@
                 token = strtok(t, ", ");
 
                 while (token) {
-                    debugs(78, 1, "Adding nameserver " << token << " from Registry");
+                    debugs(78, DBG_IMPORTANT, "Adding nameserver " << token << " from Registry");
                     idnsAddNameserver(token);
                     token = strtok(NULL, ", ");
                 }
@@ -648,7 +648,7 @@
         break;
 
     default:
-        debugs(78, 1, "Failed to read nameserver from Registry: Unknown System Type.");
+        debugs(78, DBG_IMPORTANT, "Failed to read nameserver from Registry: Unknown System Type.");
         return;
     }
 }
@@ -802,7 +802,7 @@
         char buf[MAX_IPSTRLEN] = "";
         if (vc->ns < nns)
             nameservers[vc->ns].S.NtoA(buf,MAX_IPSTRLEN);
-        debugs(78, 1, HERE << "Failed to connect to nameserver " << buf << " using TCP.");
+        debugs(78, DBG_IMPORTANT, HERE << "Failed to connect to nameserver " << buf << " using TCP.");
         return;
     }
 
@@ -871,7 +871,7 @@
 
     if (!vc) {
         char buf[MAX_IPSTRLEN];
-        debugs(78, 1, "idnsSendQuery: Failed to initiate TCP connection to nameserver " << nameservers[ns].S.NtoA(buf,MAX_IPSTRLEN) << "!");
+        debugs(78, DBG_IMPORTANT, "idnsSendQuery: Failed to initiate TCP connection to nameserver " << nameservers[ns].S.NtoA(buf,MAX_IPSTRLEN) << "!");
 
         return;
     }
@@ -891,12 +891,12 @@
 idnsSendQuery(idns_query * q)
 {
     if (DnsSocketA < 0 && DnsSocketB < 0) {
-        debugs(78, 1, "WARNING: idnsSendQuery: Can't send query, no DNS socket!");
+        debugs(78, DBG_IMPORTANT, "WARNING: idnsSendQuery: Can't send query, no DNS socket!");
         return;
     }
 
     if (nns <= 0) {
-        debugs(78, 1, "WARNING: idnsSendQuery: Can't send query, no DNS nameservers known!");
+        debugs(78, DBG_IMPORTANT, "WARNING: idnsSendQuery: Can't send query, no DNS nameservers known!");
         return;
     }
 
@@ -925,9 +925,9 @@
         q->sent_t = current_time;
 
         if (y < 0 && nameservers[ns].S.IsIPv6())
-            debugs(50, 1, "idnsSendQuery: FD " << DnsSocketB << ": sendto: " << xstrerror());
+            debugs(50, DBG_IMPORTANT, "idnsSendQuery: FD " << DnsSocketB << ": sendto: " << xstrerror());
         if (x < 0 && nameservers[ns].S.IsIPv4())
-            debugs(50, 1, "idnsSendQuery: FD " << DnsSocketA << ": sendto: " << xstrerror());
+            debugs(50, DBG_IMPORTANT, "idnsSendQuery: FD " << DnsSocketA << ": sendto: " << xstrerror());
 
     } while ( (x<0 && y<0) && q->nsends % nns != 0);
 
@@ -989,7 +989,7 @@
         ++id;
 
         if (id == first_id) {
-            debugs(78, 1, "idnsQueryID: Warning, too many pending DNS requests");
+            debugs(78, DBG_IMPORTANT, "idnsQueryID: Warning, too many pending DNS requests");
             break;
         }
     }
@@ -1097,7 +1097,7 @@
     n = rfc1035MessageUnpack(buf, sz, &message);
 
     if (message == NULL) {
-        debugs(78, 1, "idnsGrokReply: Malformed DNS response");
+        debugs(78, DBG_IMPORTANT, "idnsGrokReply: Malformed DNS response");
         return;
     }
 
@@ -1284,7 +1284,7 @@
             if (errno != ECONNREFUSED && errno != EHOSTUNREACH)
 #endif
 
-                debugs(50, 1, "idnsRead: FD " << fd << " recvfrom: " << xstrerror());
+                debugs(50, DBG_IMPORTANT, "idnsRead: FD " << fd << " recvfrom: " << xstrerror());
 
             break;
         }
@@ -1312,10 +1312,10 @@
             static time_t last_warning = 0;
 
             if (squid_curtime - last_warning > 60) {
-                debugs(78, 1, "WARNING: Reply from unknown nameserver " << from);
+                debugs(78, DBG_IMPORTANT, "WARNING: Reply from unknown nameserver " << from);
                 last_warning = squid_curtime;
             } else {
-                debugs(78, 1, "WARNING: Reply from unknown nameserver " << from << " (retrying..." <<  (squid_curtime-last_warning) << "<=60)" );
+                debugs(78, DBG_IMPORTANT, "WARNING: Reply from unknown nameserver " << from << " (retrying..." <<  (squid_curtime-last_warning) << "<=60)" );
             }
             continue;
         }
@@ -1515,12 +1515,12 @@
          */
         if (DnsSocketB >= 0) {
             comm_local_port(DnsSocketB);
-            debugs(78, 1, "DNS Socket created at " << addrV6 << ", FD " << DnsSocketB);
+            debugs(78, DBG_IMPORTANT, "DNS Socket created at " << addrV6 << ", FD " << DnsSocketB);
             Comm::SetSelect(DnsSocketB, COMM_SELECT_READ, idnsRead, NULL, 0);
         }
         if (DnsSocketA >= 0) {
             comm_local_port(DnsSocketA);
-            debugs(78, 1, "DNS Socket created at " << addrV4 << ", FD " << DnsSocketA);
+            debugs(78, DBG_IMPORTANT, "DNS Socket created at " << addrV4 << ", FD " << DnsSocketA);
             Comm::SetSelect(DnsSocketA, COMM_SELECT_READ, idnsRead, NULL, 0);
         }
     }
@@ -1539,14 +1539,14 @@
 #endif
 
     if (0 == nns) {
-        debugs(78, 1, "Warning: Could not find any nameservers. Trying to use localhost");
+        debugs(78, DBG_IMPORTANT, "Warning: Could not find any nameservers. Trying to use localhost");
 #if _SQUID_WINDOWS_
-        debugs(78, 1, "Please check your TCP-IP settings or /etc/resolv.conf file");
+        debugs(78, DBG_IMPORTANT, "Please check your TCP-IP settings or /etc/resolv.conf file");
 #else
-        debugs(78, 1, "Please check your /etc/resolv.conf file");
+        debugs(78, DBG_IMPORTANT, "Please check your /etc/resolv.conf file");
 #endif
 
-        debugs(78, 1, "or use the 'dns_nameservers' option in squid.conf.");
+        debugs(78, DBG_IMPORTANT, "or use the 'dns_nameservers' option in squid.conf.");
         idnsAddNameserver("127.0.0.1");
     }
 

=== modified file 'src/errorpage.cc'
--- src/errorpage.cc	2012-07-23 15:34:12 +0000
+++ src/errorpage.cc	2012-08-02 21:18:43 +0000
@@ -1002,7 +1002,7 @@
         /* for backward compat we make %s show the full URL. Drop this in some future release. */
         if (building_deny_info_url) {
             p = request ? urlCanonical(request) : url;
-            debugs(0,0, "WARNING: deny_info now accepts coded tags. Use %u to get the full URL instead of %s");
+            debugs(0, DBG_CRITICAL, "WARNING: deny_info now accepts coded tags. Use %u to get the full URL instead of %s");
         } else
             p = visible_appname_string;
         break;

=== modified file 'src/esi/Context.h'
--- src/esi/Context.h	2009-03-10 20:52:45 +0000
+++ src/esi/Context.h	2012-08-04 12:11:57 +0000
@@ -149,7 +149,6 @@
     bool cachedASTInUse;
 
 private:
-    CBDATA_CLASS(ESIContext);
     void fail ();
     void freeResources();
     void fixupOutboundTail();
@@ -168,6 +167,7 @@
     virtual void parserDefault (const char *s, int len);
     virtual void parserComment (const char *s);
     bool processing;
+    CBDATA_CLASS(ESIContext);
 };
 
 #endif /* SQUID_ESICONTEXT_H */

=== modified file 'src/esi/Esi.cc'
--- src/esi/Esi.cc	2012-07-23 15:15:27 +0000
+++ src/esi/Esi.cc	2012-08-02 21:18:43 +0000
@@ -989,7 +989,7 @@
     debugs(86, 5, "ESIContext::addStackElement: About to add ESI Node " << element.getRaw());
 
     if (!parserState.top()->addElement(element)) {
-        debugs(86, 1, "ESIContext::addStackElement: failed to add esi node, probable error in ESI template");
+        debugs(86, DBG_IMPORTANT, "ESIContext::addStackElement: failed to add esi node, probable error in ESI template");
         flags.error = 1;
     } else {
         /* added ok, push onto the stack */
@@ -1199,13 +1199,13 @@
         if (!tempParser->parse("<div>", 5,0) ||
                 !tempParser->parse(s + 3, strlen(s) - 3, 0) ||
                 !tempParser->parse("</div>",6,1)) {
-            debugs(86, 0, "ESIContext::parserComment: Parsing fragment '" << s + 3 << "' failed.");
+            debugs(86, DBG_CRITICAL, "ESIContext::parserComment: Parsing fragment '" << s + 3 << "' failed.");
             setError();
             char tempstr[1024];
             snprintf(tempstr, 1023, "ESIContext::parserComment: Parse error at line %ld:\n%s\n",
                      tempParser->lineNumber(),
                      tempParser->errorString());
-            debugs(86, 0, "" << tempstr << "");
+            debugs(86, DBG_CRITICAL, "" << tempstr << "");
 
             setErrorMessage(tempstr);
         }
@@ -1219,7 +1219,7 @@
         len = strlen (s);
 
         if (len > sizeof (localbuf) - 9) {
-            debugs(86, 0, "ESIContext::parserComment: Truncating long comment");
+            debugs(86, DBG_CRITICAL, "ESIContext::parserComment: Truncating long comment");
             len = sizeof (localbuf) - 9;
         }
 
@@ -1241,7 +1241,7 @@
     ESIElement::Pointer element (new esiLiteral (this, s, len));
 
     if (!parserState.top()->addElement(element)) {
-        debugs(86, 1, "ESIContext::addLiteral: failed to add esi node, probable error in ESI template");
+        debugs(86, DBG_IMPORTANT, "ESIContext::addLiteral: failed to add esi node, probable error in ESI template");
         flags.error = 1;
     }
 }
@@ -1267,7 +1267,7 @@
         snprintf (tempstr, 1023, "esiProcess: Parse error at line %ld:\n%s\n",
                   parserState.theParser->lineNumber(),
                   parserState.theParser->errorString());
-        debugs(86, 0, "" << tempstr << "");
+        debugs(86, DBG_CRITICAL, "" << tempstr << "");
 
         setErrorMessage(tempstr);
 
@@ -1383,7 +1383,7 @@
             break;
 
         case ESI_PROCESS_FAILED:
-            debugs(86, 0, "esiProcess: tree Processed FAILED");
+            debugs(86, DBG_CRITICAL, "esiProcess: tree Processed FAILED");
             setError();
 
             setErrorMessage("esiProcess: ESI template Processing failed.");
@@ -1749,7 +1749,7 @@
 
     if (dynamic_cast<esiAttempt*>(element.getRaw())) {
         if (attempt.getRaw()) {
-            debugs(86, 1, "esiTryAdd: Failed for " << this << " - try allready has an attempt node (section 3.4)");
+            debugs(86, DBG_IMPORTANT, "esiTryAdd: Failed for " << this << " - try allready has an attempt node (section 3.4)");
             return false;
         }
 
@@ -1759,7 +1759,7 @@
 
     if (dynamic_cast<esiExcept*>(element.getRaw())) {
         if (except.getRaw()) {
-            debugs(86, 1, "esiTryAdd: Failed for " << this << " - try already has an except node (section 3.4)");
+            debugs(86, DBG_IMPORTANT, "esiTryAdd: Failed for " << this << " - try already has an except node (section 3.4)");
             return false;
         }
 
@@ -1767,7 +1767,7 @@
         return true;
     }
 
-    debugs(86, 1, "esiTryAdd: Failed to add element " << element.getRaw() << " to try " << this << ", incorrect element type (see section 3.4)");
+    debugs(86, DBG_IMPORTANT, "esiTryAdd: Failed to add element " << element.getRaw() << " to try " << this << ", incorrect element type (see section 3.4)");
     return false;
 }
 
@@ -1787,12 +1787,12 @@
     assert (this);
 
     if (!attempt.getRaw()) {
-        debugs(86, 0, "esiTryProcess: Try has no attempt element - ESI template is invalid (section 3.4)");
+        debugs(86, DBG_CRITICAL, "esiTryProcess: Try has no attempt element - ESI template is invalid (section 3.4)");
         return ESI_PROCESS_FAILED;
     }
 
     if (!except.getRaw()) {
-        debugs(86, 0, "esiTryProcess: Try has no except element - ESI template is invalid (section 3.4)");
+        debugs(86, DBG_CRITICAL, "esiTryProcess: Try has no except element - ESI template is invalid (section 3.4)");
         return ESI_PROCESS_FAILED;
     }
 
@@ -2057,13 +2057,13 @@
 
     /* Some elements require specific parents */
     if (!(dynamic_cast<esiWhen*>(element.getRaw()) || dynamic_cast<esiOtherwise*>(element.getRaw()))) {
-        debugs(86, 0, "esiChooseAdd: invalid child node for esi:choose (section 3.3)");
+        debugs(86, DBG_CRITICAL, "esiChooseAdd: invalid child node for esi:choose (section 3.3)");
         return false;
     }
 
     if (dynamic_cast<esiOtherwise*>(element.getRaw())) {
         if (otherwise.getRaw()) {
-            debugs(86, 0, "esiChooseAdd: only one otherwise node allowed for esi:choose (section 3.3)");
+            debugs(86, DBG_CRITICAL, "esiChooseAdd: only one otherwise node allowed for esi:choose (section 3.3)");
             return false;
         }
 
@@ -2346,7 +2346,7 @@
             /* ignore mistyped attributes.
              * TODO:? error on these for user feedback - config parameter needed
              */
-            debugs(86, 1, "Found misttyped attribute on ESI When clause");
+            debugs(86, DBG_IMPORTANT, "Found misttyped attribute on ESI When clause");
         }
     }
 

=== modified file 'src/esi/Expression.cc'
--- src/esi/Expression.cc	2012-01-20 18:55:04 +0000
+++ src/esi/Expression.cc	2012-08-02 21:10:18 +0000
@@ -174,7 +174,7 @@
             return 0;
         } else {
             /* TODO: numeric to string conversion ? */
-            debugs(86, 1, "strcmp with non-string");
+            debugs(86, DBG_IMPORTANT, "strcmp with non-string");
             return -2;
         }
     } else if (a.valuestored == ESI_LITERAL_FLOAT) {
@@ -194,7 +194,7 @@
                 return 1;
         } else {
             /* TODO: attempt numeric converson again? */
-            debugs(86, 1, "floatcomp with non float or int");
+            debugs(86, DBG_IMPORTANT, "floatcomp with non float or int");
             return -2;
         }
     } else if (a.valuestored == ESI_LITERAL_INT) {
@@ -214,7 +214,7 @@
                 return 1;
         } else {
             /* TODO: attempt numeric converson again? */
-            debugs(86, 1, "intcomp vs non float non int");
+            debugs(86, DBG_IMPORTANT, "intcomp vs non float non int");
             return -2;
         }
     }
@@ -252,7 +252,7 @@
 int
 evalliteral(stackmember * stack, int *depth, int whereAmI, stackmember * candidate)
 {
-    debugs(86, 1, "attempt to evaluate a literal");
+    debugs(86, DBG_IMPORTANT, "attempt to evaluate a literal");
     /* literals can't be evaluated */
     return 1;
 }
@@ -260,7 +260,7 @@
 int
 evalexpr(stackmember * stack, int *depth, int whereAmI, stackmember * candidate)
 {
-    debugs(86, 1, "attempt to evaluate a sub-expression result");
+    debugs(86, DBG_IMPORTANT, "attempt to evaluate a sub-expression result");
     /* sub-scpr's can't be evaluated */
     return 1;
 }
@@ -411,7 +411,7 @@
         /* Something wrong upstream */
         return 1;
 
-    /*  debugs(86, 1, "?= " << srv.value.integral << " "); */
+    /*  debugs(86, DBG_IMPORTANT, "?= " << srv.value.integral << " "); */
     return 0;
 
 
@@ -460,7 +460,7 @@
         /* Something wrong upstream */
         return 1;
 
-    /* debugs(86, 1, "?= " << srv.value.integral << " "); */
+    /* debugs(86, DBG_IMPORTANT, "?= " << srv.value.integral << " "); */
     return 0;
 
 
@@ -509,7 +509,7 @@
         /* Something wrong upstream */
         return 1;
 
-    /* debugs(86, 1, "?= " << srv.value.integral << " "); */
+    /* debugs(86, DBG_IMPORTANT, "?= " << srv.value.integral << " "); */
     return 0;
 
 
@@ -558,7 +558,7 @@
         /* Something wrong upstream */
         return 1;
 
-    /* debugs(86, 1, "?= " << srv.value.integral << " "); */
+    /* debugs(86, DBG_IMPORTANT, "?= " << srv.value.integral << " "); */
     return 0;
 
 }
@@ -607,7 +607,7 @@
         /* Something wrong upstream */
         return 1;
 
-    /* debugs(86, 1, "?= " << srv.value.integral << " "); */
+    /* debugs(86, DBG_IMPORTANT, "?= " << srv.value.integral << " "); */
     return 0;
 }
 
@@ -654,14 +654,14 @@
         /* Something wrong upstream */
         return 1;
 
-    /* debugs(86, 1, "?= " << srv.value.integral << " "); */
+    /* debugs(86, DBG_IMPORTANT, "?= " << srv.value.integral << " "); */
     return 0;
 }
 
 int
 evalstartexpr(stackmember * stack, int *depth, int whereAmI, stackmember * candidate)
 {
-    /* debugs(86, 1, "?("); */
+    /* debugs(86, DBG_IMPORTANT, "?("); */
 
     if (whereAmI != *depth - 2)
         /* invalid stack */
@@ -720,7 +720,7 @@
 
             if (s == end || errno) {
                 /* Couldn't convert to float */
-                debugs(86, 1, "failed to convert '" << s << "' to float ");
+                debugs(86, DBG_IMPORTANT, "failed to convert '" << s << "' to float ");
                 *endptr = origs;
             } else {
                 debugs(86,6, "found " << rv.value.floating << " of length " << end - s);
@@ -737,7 +737,7 @@
 
             if (s == end || errno) {
                 /* Couldn't convert to int */
-                debugs(86, 1, "failed to convert '" << s << "' to int ");
+                debugs(86, DBG_IMPORTANT, "failed to convert '" << s << "' to int ");
                 *endptr = origs;
             } else {
                 debugs(86,6, "found " << rv.value.integral << " of length " << end - s);
@@ -770,7 +770,7 @@
             ++t;
 
         if (!*t) {
-            debugs(86, 1, "missing end \' in '" << s << "'");
+            debugs(86, DBG_IMPORTANT, "missing end \' in '" << s << "'");
             *endptr = origs;
         } else {
             *endptr = t + 1;
@@ -823,7 +823,7 @@
             rv.precedence = 5;
             rv.eval = evalequals;
         } else {
-            debugs(86, 1, "invalid expr '" << s << "'");
+            debugs(86, DBG_IMPORTANT, "invalid expr '" << s << "'");
             *endptr = origs;
         }
     } else if ('<' == *s) {
@@ -871,7 +871,7 @@
         rv.precedence = 1;
         rv.eval = evalexpr;
     } else {
-        debugs(86, 1, "invalid expr '" << s << "'");
+        debugs(86, DBG_IMPORTANT, "invalid expr '" << s << "'");
         *endptr = origs;
     }
 
@@ -997,7 +997,7 @@
                 /* cleanup candidate and stack */
                 dumpstack(stack, *stackdepth);
                 cleanmember(candidate);
-                debugs(86, 1, "invalid expression");
+                debugs(86, DBG_IMPORTANT, "invalid expression");
                 return 0;
             }
         } else {
@@ -1031,7 +1031,7 @@
             s = end;
         } else {
             assert (s == end);
-            debugs(86, 1, "failed parsing expression");
+            debugs(86, DBG_IMPORTANT, "failed parsing expression");
             PROF_stop(esiExpressionEval);
             return 0;
         }
@@ -1045,7 +1045,7 @@
         if (stack[stackdepth - 2].
                 eval(stack, &stackdepth, stackdepth - 2, &rv)) {
             /* special case - leading operator failed */
-            debugs(86, 1, "invalid expression");
+            debugs(86, DBG_IMPORTANT, "invalid expression");
             PROF_stop(esiExpressionEval);
             return 0;
         }

=== modified file 'src/esi/Include.cc'
--- src/esi/Include.cc	2012-01-20 18:55:04 +0000
+++ src/esi/Include.cc	2012-08-02 21:18:43 +0000
@@ -184,7 +184,7 @@
         return;
 
     case STREAM_FAILED:
-        debugs(86, 1, "ESI subrequest failed transfer");
+        debugs(86, DBG_IMPORTANT, "ESI subrequest failed transfer");
         esiStream->include->includeFail (esiStream);
         esiStream->finished = 1;
         httpRequestFree (http);
@@ -342,7 +342,7 @@
            "'");
 
     if (clientBeginRequest(METHOD_GET, tempUrl, esiBufferRecipient, esiBufferDetach, stream.getRaw(), &tempheaders, stream->localbuffer->buf, HTTP_REQBUF_SZ)) {
-        debugs(86, 0, "starting new ESI subrequest failed");
+        debugs(86, DBG_CRITICAL, "starting new ESI subrequest failed");
     }
 
     tempheaders.clean();
@@ -379,7 +379,7 @@
                 flags.onerrorcontinue = 1;
             } else {
                 /* ignore mistyped attributes */
-                debugs(86, 1, "invalid value for onerror='" << attr[i+1] << "'");
+                debugs(86, DBG_IMPORTANT, "invalid value for onerror='" << attr[i+1] << "'");
             }
         } else {
             /* ignore mistyped attributes. TODO:? error on these for user feedback - config parameter needed
@@ -407,7 +407,7 @@
     } else {
         alt = NULL;
 
-        debugs(86, 1, "ESIIncludeNew: esi:include with no src attributes");
+        debugs(86, DBG_IMPORTANT, "ESIIncludeNew: esi:include with no src attributes");
 
         flags.failed = 1;
     }

=== modified file 'src/esi/Sequence.cc'
--- src/esi/Sequence.cc	2012-01-20 18:55:04 +0000
+++ src/esi/Sequence.cc	2012-08-02 21:18:43 +0000
@@ -164,7 +164,7 @@
 
     if (dynamic_cast<esiAttempt*>(element.getRaw()) ||
             dynamic_cast<esiExcept*>(element.getRaw())) {
-        debugs(86, 0, "esiSequenceAdd: misparented Attempt or Except element (section 3.4)");
+        debugs(86, DBG_CRITICAL, "esiSequenceAdd: misparented Attempt or Except element (section 3.4)");
         return false;
     }
 

=== modified file 'src/eui/Eui48.cc'
--- src/eui/Eui48.cc	2012-07-12 09:08:16 +0000
+++ src/eui/Eui48.cc	2012-08-02 21:18:43 +0000
@@ -128,7 +128,7 @@
     int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0, a6 = 0;
 
     if (sscanf(asc, "%x:%x:%x:%x:%x:%x", &a1, &a2, &a3, &a4, &a5, &a6) != 6) {
-        debugs(28, 0, "Decode EUI-48: Invalid ethernet address '" << asc << "'");
+        debugs(28, DBG_CRITICAL, "Decode EUI-48: Invalid ethernet address '" << asc << "'");
         clear();
         return false;		/* This is not valid address */
     }
@@ -224,14 +224,14 @@
     ifc.ifc_buf = (char *)ifbuffer;
 
     if (ioctl(tmpSocket, SIOCGIFCONF, &ifc) < 0) {
-        debugs(28, 1, "Attempt to retrieve interface list failed: " << xstrerror());
+        debugs(28, DBG_IMPORTANT, "Attempt to retrieve interface list failed: " << xstrerror());
         clear();
         close(tmpSocket);
         return false;
     }
 
     if (ifc.ifc_len > (int)sizeof(ifbuffer)) {
-        debugs(28, 1, "Interface list too long - " << ifc.ifc_len);
+        debugs(28, DBG_IMPORTANT, "Interface list too long - " << ifc.ifc_len);
         clear();
         close(tmpSocket);
         return false;
@@ -277,7 +277,7 @@
             else if (ENODEV == errno)
                 (void) 0;
             else
-                debugs(28, 1, "ARP query " << ipAddr << " failed: " << ifr->ifr_name << ": " << xstrerror());
+                debugs(28, DBG_IMPORTANT, "ARP query " << ipAddr << " failed: " << ifr->ifr_name << ": " << xstrerror());
 
             continue;
         }
@@ -387,19 +387,19 @@
     mib[5] = RTF_LLINFO;
 
     if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) {
-        debugs(28, 0, "Can't estimate ARP table size!");
+        debugs(28, DBG_CRITICAL, "Can't estimate ARP table size!");
         clear();
         return false;
     }
 
     if ((buf = (char *)xmalloc(needed)) == NULL) {
-        debugs(28, 0, "Can't allocate temporary ARP table!");
+        debugs(28, DBG_CRITICAL, "Can't allocate temporary ARP table!");
         clear();
         return false;
     }
 
     if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) {
-        debugs(28, 0, "Can't retrieve ARP table!");
+        debugs(28, DBG_CRITICAL, "Can't retrieve ARP table!");
         xfree(buf);
         clear();
         return false;
@@ -464,21 +464,21 @@
 
     /* Get size of Windows ARP table */
     if (GetIpNetTable(NetTable, &ipNetTableLen, FALSE) != ERROR_INSUFFICIENT_BUFFER) {
-        debugs(28, 0, "Can't estimate ARP table size!");
+        debugs(28, DBG_CRITICAL, "Can't estimate ARP table size!");
         clear();
         return false;
     }
 
     /* Allocate space for ARP table and assign pointers */
     if ((NetTable = (PMIB_IPNETTABLE)xmalloc(ipNetTableLen)) == NULL) {
-        debugs(28, 0, "Can't allocate temporary ARP table!");
+        debugs(28, DBG_CRITICAL, "Can't allocate temporary ARP table!");
         clear();
         return false;
     }
 
     /* Get actual ARP table */
     if ((dwNetTable = GetIpNetTable(NetTable, &ipNetTableLen, FALSE)) != NO_ERROR) {
-        debugs(28, 0, "Can't retrieve ARP table!");
+        debugs(28, DBG_CRITICAL, "Can't retrieve ARP table!");
         xfree(NetTable);
         clear();
         return false;
@@ -516,7 +516,7 @@
 
 #else
 
-    debugs(28, 0, "ERROR: ARP / MAC / EUI-* operations not supported on this operating system.");
+    debugs(28, DBG_CRITICAL, "ERROR: ARP / MAC / EUI-* operations not supported on this operating system.");
 
 #endif
     /*

=== modified file 'src/eui/Eui64.cc'
--- src/eui/Eui64.cc	2012-01-20 18:55:04 +0000
+++ src/eui/Eui64.cc	2012-08-02 21:18:43 +0000
@@ -68,7 +68,7 @@
 #if 0 /* no actual lookup coded yet */
 
     /* no OS yet supported for NDP protocol lookup */
-    debugs(28, 0, "ERROR: ARP / MAC / EUI-* operations not supported on this operating system.");
+    debugs(28, DBG_CRITICAL, "ERROR: ARP / MAC / EUI-* operations not supported on this operating system.");
 
     /*
      * Address was not found on any interface

=== modified file 'src/external_acl.cc'
--- src/external_acl.cc	2012-07-26 08:40:22 +0000
+++ src/external_acl.cc	2012-08-02 21:18:43 +0000
@@ -341,7 +341,7 @@
             a->negative_ttl = atoi(token + 13);
         } else if (strncmp(token, "children=", 9) == 0) {
             a->children.n_max = atoi(token + 9);
-            debugs(0, 0, "WARNING: external_acl_type option children=N has been deprecated in favor of children-max=N and children-startup=N");
+            debugs(0, DBG_CRITICAL, "WARNING: external_acl_type option children=N has been deprecated in favor of children-max=N and children-startup=N");
         } else if (strncmp(token, "children-max=", 13) == 0) {
             a->children.n_max = atoi(token + 13);
         } else if (strncmp(token, "children-startup=", 17) == 0) {
@@ -367,11 +367,11 @@
                       bind to IPv4/v6 localhost port. */
         } else if (strcmp(token, "ipv4") == 0) {
             if ( !a->local_addr.SetIPv4() ) {
-                debugs(3, 0, "WARNING: Error converting " << a->local_addr << " to IPv4 in " << a->name );
+                debugs(3, DBG_CRITICAL, "WARNING: Error converting " << a->local_addr << " to IPv4 in " << a->name );
             }
         } else if (strcmp(token, "ipv6") == 0) {
             if (!Ip::EnableIpv6)
-                debugs(3, 0, "WARNING: --enable-ipv6 required for external ACL helpers to use IPv6: " << a->name );
+                debugs(3, DBG_CRITICAL, "WARNING: --enable-ipv6 required for external ACL helpers to use IPv6: " << a->name );
             // else nothing to do.
         } else {
             break;
@@ -478,7 +478,7 @@
         else if (strcmp(token, "%%") == 0)
             format->type = _external_acl_format::EXT_ACL_PERCENT;
         else {
-            debugs(0,0, "ERROR: Unknown Format token " << token);
+            debugs(0, DBG_CRITICAL, "ERROR: Unknown Format token " << token);
             self_destruct();
         }
 
@@ -717,12 +717,12 @@
 #if USE_AUTH
     if (data->def->require_auth) {
         if (authenticateSchemeCount() == 0) {
-            debugs(28, 0, "Can't use proxy auth because no authentication schemes were compiled.");
+            debugs(28, DBG_CRITICAL, "Can't use proxy auth because no authentication schemes were compiled.");
             return false;
         }
 
         if (authenticateActiveSchemeCount() == 0) {
-            debugs(28, 0, "Can't use proxy auth because no authentication schemes are fully configured.");
+            debugs(28, DBG_CRITICAL, "Can't use proxy auth because no authentication schemes are fully configured.");
             return false;
         }
     }

=== modified file 'src/fd.cc'
--- src/fd.cc	2012-07-20 15:31:04 +0000
+++ src/fd.cc	2012-08-02 21:18:43 +0000
@@ -213,7 +213,7 @@
     F = &fd_table[fd];
 
     if (F->flags.open) {
-        debugs(51, 1, "WARNING: Closing open FD " << std::setw(4) << fd);
+        debugs(51, DBG_IMPORTANT, "WARNING: Closing open FD " << std::setw(4) << fd);
         fd_close(fd);
     }
 
@@ -308,7 +308,7 @@
         if (i == fileno(debug_log))
             continue;
 
-        debugs(51, 1, "Open FD "<< std::left<< std::setw(10) <<
+        debugs(51, DBG_IMPORTANT, "Open FD "<< std::left<< std::setw(10) <<
                (F->bytes_read && F->bytes_written ? "READ/WRITE" :
                 F->bytes_read ? "READING" : F->bytes_written ? "WRITING" :
                 "UNSTARTED")  <<
@@ -362,13 +362,13 @@
 
     if (newReserve > x) {
         /* perhaps this should be fatal()? -DW */
-        debugs(51, 0, "WARNING: This machine has a serious shortage of filedescriptors.");
+        debugs(51, DBG_CRITICAL, "WARNING: This machine has a serious shortage of filedescriptors.");
         newReserve = x;
     }
 
     if (Squid_MaxFD - newReserve < min(256, Squid_MaxFD / 2))
         fatalf("Too few filedescriptors available in the system (%d usable of %d).\n", Squid_MaxFD - newReserve, Squid_MaxFD);
 
-    debugs(51, 0, "Reserved FD adjusted from " << RESERVED_FD << " to " << newReserve << " due to failures");
+    debugs(51, DBG_CRITICAL, "Reserved FD adjusted from " << RESERVED_FD << " to " << newReserve << " due to failures");
     RESERVED_FD = newReserve;
 }

=== modified file 'src/format/Config.cc'
--- src/format/Config.cc	2012-01-20 18:55:04 +0000
+++ src/format/Config.cc	2012-08-02 21:18:43 +0000
@@ -39,5 +39,5 @@
     if (tokenArray != NULL)
         tokens.push_back(TokenNamespace(nsName, tokenArray));
     else
-        debugs(0,0, "BUG: format tokens for '" << nsName << "' missing!");
+        debugs(0, DBG_CRITICAL, "BUG: format tokens for '" << nsName << "' missing!");
 }

=== modified file 'src/format/Token.cc'
--- src/format/Token.cc	2012-07-23 15:34:12 +0000
+++ src/format/Token.cc	2012-08-02 21:18:43 +0000
@@ -526,28 +526,28 @@
         break;
 
     case LFT_HTTP_SENT_STATUS_CODE_OLD_30:
-        debugs(46, 0, "WARNING: The \"Hs\" formatting code is deprecated. Use the \">Hs\" instead.");
+        debugs(46, DBG_CRITICAL, "WARNING: The \"Hs\" formatting code is deprecated. Use the \">Hs\" instead.");
         type = LFT_HTTP_SENT_STATUS_CODE;
         break;
 
     case LFT_SERVER_LOCAL_IP_OLD_27:
-        debugs(46, 0, "WARNING: The \"oa\" formatting code is deprecated. Use the \"<la\" instead.");
+        debugs(46, DBG_CRITICAL, "WARNING: The \"oa\" formatting code is deprecated. Use the \"<la\" instead.");
         type = LFT_SERVER_LOCAL_IP;
         break;
 
     case LFT_REQUEST_URLPATH_OLD_31:
-        debugs(46, 0, "WARNING: The \"rp\" formatting code is deprecated. Use the \">rp\" instead.");
+        debugs(46, DBG_CRITICAL, "WARNING: The \"rp\" formatting code is deprecated. Use the \">rp\" instead.");
         type = LFT_CLIENT_REQ_URLPATH;
         break;
 
     case LFT_REQUEST_VERSION_OLD_2X:
-        debugs(46, 0, "WARNING: The \">v\" formatting code is deprecated. Use the \">rv\" instead.");
+        debugs(46, DBG_CRITICAL, "WARNING: The \">v\" formatting code is deprecated. Use the \">rv\" instead.");
         type = LFT_REQUEST_VERSION;
         break;
 
 #if !USE_SQUID_EUI
     case LFT_CLIENT_EUI:
-        debugs(46, 0, "WARNING: The \">eui\" formatting code requires EUI features which are disabled in this Squid.");
+        debugs(46, DBG_CRITICAL, "WARNING: The \">eui\" formatting code requires EUI features which are disabled in this Squid.");
         break;
 #endif
 

=== modified file 'src/forward.cc'
--- src/forward.cc	2012-07-29 08:15:17 +0000
+++ src/forward.cc	2012-08-02 21:10:18 +0000
@@ -177,7 +177,7 @@
 FwdState::completed()
 {
     if (flags.forward_completed == 1) {
-        debugs(17, 1, HERE << "FwdState::completed called on a completed request! Bad!");
+        debugs(17, DBG_IMPORTANT, HERE << "FwdState::completed called on a completed request! Bad!");
         return;
     }
 
@@ -652,7 +652,7 @@
         case SSL_ERROR_SSL:
         case SSL_ERROR_SYSCALL:
             ssl_lib_error = ERR_get_error();
-            debugs(81, 1, "fwdNegotiateSSL: Error negotiating SSL connection on FD " << fd <<
+            debugs(81, DBG_IMPORTANT, "fwdNegotiateSSL: Error negotiating SSL connection on FD " << fd <<
                    ": " << ERR_error_string(ssl_lib_error, NULL) << " (" << ssl_error <<
                    "/" << ret << "/" << errno << ")");
 
@@ -759,7 +759,7 @@
     assert(sslContext);
 
     if ((ssl = SSL_new(sslContext)) == NULL) {
-        debugs(83, 1, "fwdInitiateSSL: Error allocating handle: " << ERR_error_string(ERR_get_error(), NULL)  );
+        debugs(83, DBG_IMPORTANT, "fwdInitiateSSL: Error allocating handle: " << ERR_error_string(ERR_get_error(), NULL)  );
         ErrorState *anErr = new ErrorState(ERR_SOCKET_FAILURE, HTTP_INTERNAL_SERVER_ERROR, request);
         // TODO: create Ssl::ErrorDetail with OpenSSL-supplied error code
         fail(anErr);

=== modified file 'src/fqdncache.cc'
--- src/fqdncache.cc	2012-07-23 15:34:12 +0000
+++ src/fqdncache.cc	2012-08-02 21:10:18 +0000
@@ -353,7 +353,7 @@
     f->flags.negcached = 1;
 
     if (inbuf == NULL) {
-        debugs(35, 1, "fqdncacheParse: Got <NULL> reply in response to '" << name << "'");
+        debugs(35, DBG_IMPORTANT, "fqdncacheParse: Got <NULL> reply in response to '" << name << "'");
         f->error_message = xstrdup("Internal Error");
         return -1;
     }
@@ -363,7 +363,7 @@
     token = strtok(buf, w_space);
 
     if (NULL == token) {
-        debugs(35, 1, "fqdncacheParse: Got <NULL>, expecting '$name' in response to '" << name << "'");
+        debugs(35, DBG_IMPORTANT, "fqdncacheParse: Got <NULL>, expecting '$name' in response to '" << name << "'");
         f->error_message = xstrdup("Internal Error");
         return -1;
     }
@@ -376,7 +376,7 @@
     }
 
     if (0 != strcmp(token, "$name")) {
-        debugs(35, 1, "fqdncacheParse: Got '" << inbuf << "', expecting '$name' in response to '" << name << "'");
+        debugs(35, DBG_IMPORTANT, "fqdncacheParse: Got '" << inbuf << "', expecting '$name' in response to '" << name << "'");
         f->error_message = xstrdup("Internal Error");
         return -1;
     }
@@ -384,7 +384,7 @@
     token = strtok(NULL, w_space);
 
     if (NULL == token) {
-        debugs(35, 1, "fqdncacheParse: Got '" << inbuf << "', expecting TTL in response to '" << name << "'");
+        debugs(35, DBG_IMPORTANT, "fqdncacheParse: Got '" << inbuf << "', expecting TTL in response to '" << name << "'");
         f->error_message = xstrdup("Internal Error");
         return -1;
     }
@@ -394,7 +394,7 @@
     token = strtok(NULL, w_space);
 
     if (NULL == token) {
-        debugs(35, 1, "fqdncacheParse: Got '" << inbuf << "', expecting hostname in response to '" << name << "'");
+        debugs(35, DBG_IMPORTANT, "fqdncacheParse: Got '" << inbuf << "', expecting hostname in response to '" << name << "'");
         f->error_message = xstrdup("Internal Error");
         return -1;
     }
@@ -468,7 +468,7 @@
     }
 
     if (f->name_count == 0) {
-        debugs(35, 1, "fqdncacheParse: No PTR record for '" << name << "'");
+        debugs(35, DBG_IMPORTANT, "fqdncacheParse: No PTR record for '" << name << "'");
         return 0;
     }
 
@@ -846,7 +846,7 @@
         if (1 == fce->flags.fromhosts) {
             fqdncacheUnlockEntry(fce);
         } else if (fce->locks > 0) {
-            debugs(35, 1, "fqdncacheAddEntryFromHosts: can't add static entry for locked address '" << addr << "'");
+            debugs(35, DBG_IMPORTANT, "fqdncacheAddEntryFromHosts: can't add static entry for locked address '" << addr << "'");
             return;
         } else {
             fqdncacheRelease(fce);

=== modified file 'src/fs/Makefile.am'
--- src/fs/Makefile.am	2011-09-10 16:38:36 +0000
+++ src/fs/Makefile.am	2012-08-02 15:22:06 +0000
@@ -22,11 +22,18 @@
 libufs_la_SOURCES = \
 	ufs/StoreFSufs.h \
 	ufs/StoreFSufs.cc \
-	ufs/store_dir_ufs.cc \
 	ufs/store_io_ufs.cc \
-	ufs/ufscommon.cci \
-	ufs/ufscommon.cc \
-	ufs/ufscommon.h 
+	ufs/UFSSwapDir.cc \
+	ufs/UFSSwapDir.h \
+	ufs/UFSStrategy.cc \
+	ufs/UFSStrategy.h \
+	ufs/UFSStoreState.h \
+	ufs/StoreSearchUFS.h \
+	ufs/StoreSearchUFS.cc \
+	ufs/UFSSwapLogParser.h \
+	ufs/UFSSwapLogParser.cc \
+	ufs/RebuildState.h \
+	ufs/RebuildState.cc
 
 librock_la_SOURCES = \
 	rock/RockDbCell.h \

=== modified file 'src/fs/Module.cc'
--- src/fs/Module.cc	2012-01-20 18:55:04 +0000
+++ src/fs/Module.cc	2012-07-31 21:45:27 +0000
@@ -2,7 +2,7 @@
 #include "Module.h"
 #if defined(HAVE_FS_UFS) || defined(HAVE_FS_AUFS) || defined(HAVE_FS_DISKD)
 #include "fs/ufs/StoreFSufs.h"
-#include "fs/ufs/ufscommon.h"
+#include "fs/ufs/UFSSwapDir.h"
 #endif
 
 #if HAVE_FS_COSS

=== modified file 'src/fs/aufs/StoreFSaufs.cc'
--- src/fs/aufs/StoreFSaufs.cc	2012-01-20 18:55:04 +0000
+++ src/fs/aufs/StoreFSaufs.cc	2012-07-31 21:45:27 +0000
@@ -45,8 +45,7 @@
 
 #include "fs/ufs/StoreFSufs.h"
 
-/** \todo FIXME: break UFSSwapDir out so we don't need all the guff */
-#include "fs/ufs/ufscommon.h"
+#include "fs/ufs/UFSSwapDir.h"
 
 /**
  \defgroup AUFS AUFS Storage Filesystem (UFS Based)

=== modified file 'src/fs/coss/CossSwapDir.h'
--- src/fs/coss/CossSwapDir.h	2011-10-27 23:14:28 +0000
+++ src/fs/coss/CossSwapDir.h	2012-08-04 12:11:57 +0000
@@ -136,13 +136,13 @@
     virtual StoreEntry *currentItem();
 
 private:
-    CBDATA_CLASS2(StoreSearchCoss);
     RefCount<CossSwapDir> sd;
     void (*callback)(void *cbdata);
     void *cbdata;
     bool _done;
     dlink_node * current;
     dlink_node * next_;
+    CBDATA_CLASS2(StoreSearchCoss);
 };
 
 #endif

=== modified file 'src/fs/coss/store_dir_coss.cc'
--- src/fs/coss/store_dir_coss.cc	2012-07-12 09:08:16 +0000
+++ src/fs/coss/store_dir_coss.cc	2012-08-02 21:18:43 +0000
@@ -123,7 +123,7 @@
     swaplog_fd = file_open(logPath, O_WRONLY | O_CREAT | O_BINARY);
 
     if (swaplog_fd < 0) {
-        debugs(47, 1, "" << logPath << ": " << xstrerror());
+        debugs(47, DBG_IMPORTANT, "" << logPath << ": " << xstrerror());
         fatal("storeCossDirOpenSwapLog: Failed to open swap log.");
     }
 
@@ -147,7 +147,7 @@
 CossSwapDir::ioCompletedNotification()
 {
     if (theFile->error()) {
-        debugs(47, 1, "" << path << ": " << xstrerror());
+        debugs(47, DBG_IMPORTANT, "" << path << ": " << xstrerror());
         fatal("storeCossDirInit: Failed to open a COSS file.");
     }
 }
@@ -178,9 +178,9 @@
 
         if (errflag > 0) {
             errno = errflag;
-            debugs(79, 1, "storeCossReadDone: error: " << xstrerror());
+            debugs(79, DBG_IMPORTANT, "storeCossReadDone: error: " << xstrerror());
         } else {
-            debugs(79, 1, "storeCossReadDone: got failure (" << errflag << ")");
+            debugs(79, DBG_IMPORTANT, "storeCossReadDone: got failure (" << errflag << ")");
         }
 
         rlen = -1;
@@ -218,8 +218,8 @@
 
     if (errflag) {
         ++ StoreFScoss::GetInstance().stats.stripe_write.fail;
-        debugs(79, 1, "storeCossWriteMemBufDone: got failure (" << errflag << ")");
-        debugs(79, 1, "size=" << cossWrite->membuf->diskend - cossWrite->membuf->diskstart);
+        debugs(79, DBG_IMPORTANT, "storeCossWriteMemBufDone: got failure (" << errflag << ")");
+        debugs(79, DBG_IMPORTANT, "size=" << cossWrite->membuf->diskend - cossWrite->membuf->diskstart);
     } else {
         ++ StoreFScoss::GetInstance().stats.stripe_write.success;
     }
@@ -387,7 +387,7 @@
 
     for (int aCount = 0; aCount < rb->speed; ++aCount) {
         if (fread(&s, ss, 1, rb->log) != 1) {
-            debugs(47, 1, "Done reading " << rb->sd->path << " swaplog (" << rb->n_read << " entries)");
+            debugs(47, DBG_IMPORTANT, "Done reading " << rb->sd->path << " swaplog (" << rb->n_read << " entries)");
             fclose(rb->log);
             rb->log = NULL;
             storeCossRebuildComplete(rb);
@@ -439,7 +439,7 @@
 
             if (0.0 == x - (double)
                     (int) x)
-                debugs(47, 1, "WARNING: " << rb->counts.bad_log_op << " invalid swap log entries found");
+                debugs(47, DBG_IMPORTANT, "WARNING: " << rb->counts.bad_log_op << " invalid swap log entries found");
 
             ++ rb->counts.invalid;
 
@@ -555,7 +555,7 @@
      * we'll use storeCossRebuildFromSwapLog().
      */
     fp = storeCossDirOpenTmpSwapLog(sd, &clean, &zero);
-    debugs(47, 1, "Rebuilding COSS storage in " << sd->path << " (" << (clean ? "CLEAN" : "DIRTY") << ")");
+    debugs(47, DBG_IMPORTANT, "Rebuilding COSS storage in " << sd->path << " (" << (clean ? "CLEAN" : "DIRTY") << ")");
     rb->log = fp;
     ++ StoreController::store_dirs_rebuilding;
 
@@ -598,7 +598,7 @@
     anfd = file_open(swaplog_path, O_WRONLY | O_CREAT | O_BINARY);
 
     if (anfd < 0) {
-        debugs(50, 1, "" << swaplog_path << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "" << swaplog_path << ": " << xstrerror());
         fatal("storeCossDirCloseTmpSwapLog: Failed to open swap log.");
     }
 
@@ -622,7 +622,7 @@
     int anfd;
 
     if (::stat(swaplog_path, &log_sb) < 0) {
-        debugs(50, 1, "Cache COSS Dir #" << sd->index << ": No log file");
+        debugs(50, DBG_IMPORTANT, "Cache COSS Dir #" << sd->index << ": No log file");
         safe_free(swaplog_path);
         safe_free(clean_path);
         safe_free(new_path);
@@ -639,7 +639,7 @@
     anfd = file_open(new_path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
 
     if (anfd < 0) {
-        debugs(50, 1, "" << new_path << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "" << new_path << ": " << xstrerror());
         fatal("storeDirOpenTmpSwapLog: Failed to open swap log.");
     }
 
@@ -648,7 +648,7 @@
     fp = fopen(swaplog_path, "rb");
 
     if (fp == NULL) {
-        debugs(50, 0, "" << swaplog_path << ": " << xstrerror());
+        debugs(50, DBG_CRITICAL, "" << swaplog_path << ": " << xstrerror());
         fatal("Failed to open swap log for reading");
     }
 
@@ -782,8 +782,8 @@
 
     if (outbuf_offset + ss > CLEAN_BUF_SZ) {
         if (FD_WRITE_METHOD(fd, outbuf, outbuf_offset) < 0) {
-            debugs(50, 0, "storeCossDirWriteCleanLogs: " << newLog << ": write: " << xstrerror());
-            debugs(50, 0, "storeCossDirWriteCleanLogs: Current swap logfile not replaced.");
+            debugs(50, DBG_CRITICAL, "storeCossDirWriteCleanLogs: " << newLog << ": write: " << xstrerror());
+            debugs(50, DBG_CRITICAL, "storeCossDirWriteCleanLogs: Current swap logfile not replaced.");
             file_close(fd);
             fd = -1;
             unlink(newLog);
@@ -808,8 +808,8 @@
         return;
 
     if (FD_WRITE_METHOD(state->fd, state->outbuf, state->outbuf_offset) < 0) {
-        debugs(50, 0, "storeCossDirWriteCleanLogs: " << state->newLog << ": write: " << xstrerror());
-        debugs(50, 0, "storeCossDirWriteCleanLogs: Current swap logfile not replaced.");
+        debugs(50, DBG_CRITICAL, "storeCossDirWriteCleanLogs: " << state->newLog << ": write: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "storeCossDirWriteCleanLogs: Current swap logfile not replaced.");
         file_close(state->fd);
         state->fd = -1;
         ::unlink(state->newLog);
@@ -1027,9 +1027,9 @@
     const uint64_t max_offset = (uint64_t)SwapFilenMax << blksz_bits;
 
     if (maxSize() > max_offset) {
-        debugs(47, 0, "COSS block-size = " << (1<<blksz_bits) << " bytes");
-        debugs(47,0, "COSS largest file offset = " << (max_offset >> 10) << " KB");
-        debugs(47, 0, "COSS cache_dir size = " << (maxSize() >> 10) << " KB");
+        debugs(47, DBG_CRITICAL, "COSS block-size = " << (1<<blksz_bits) << " bytes");
+        debugs(47, DBG_CRITICAL, "COSS largest file offset = " << (max_offset >> 10) << " KB");
+        debugs(47, DBG_CRITICAL, "COSS cache_dir size = " << (maxSize() >> 10) << " KB");
         fatal("COSS cache_dir size exceeds largest offset\n");
     }
 }
@@ -1045,9 +1045,9 @@
     const uint64_t size = static_cast<uint64_t>(i) << 20; // MBytes to Bytes
 
     if (size == maxSize())
-        debugs(3, 1, "Cache COSS dir '" << path << "' size remains unchanged at " << i << " MB");
+        debugs(3, DBG_IMPORTANT, "Cache COSS dir '" << path << "' size remains unchanged at " << i << " MB");
     else {
-        debugs(3, 1, "Cache COSS dir '" << path << "' size changed to " << i << " MB");
+        debugs(3, DBG_IMPORTANT, "Cache COSS dir '" << path << "' size changed to " << i << " MB");
         max_size = size;
     }
 
@@ -1098,7 +1098,7 @@
         return true;
 
     if (reconfiguring) {
-        debugs(47, 0, "WARNING: cannot change COSS block-size while Squid is running");
+        debugs(47, DBG_CRITICAL, "WARNING: cannot change COSS block-size while Squid is running");
         return false;
     }
 

=== modified file 'src/fs/coss/store_io_coss.cc'
--- src/fs/coss/store_io_coss.cc	2012-07-12 09:08:16 +0000
+++ src/fs/coss/store_io_coss.cc	2012-08-02 21:10:18 +0000
@@ -510,7 +510,7 @@
         t = (CossMemBuf *)m->data;
 
         if (t->flags.writing) {
-            debugs(79, 1, "WARNING: sleeping for 5 seconds in storeCossSync()");
+            debugs(79, DBG_IMPORTANT, "WARNING: sleeping for 5 seconds in storeCossSync()");
             sleep(5);		/* XXX EEEWWW! */
         }
 

=== modified file 'src/fs/diskd/StoreFSdiskd.cc'
--- src/fs/diskd/StoreFSdiskd.cc	2012-01-20 18:55:04 +0000
+++ src/fs/diskd/StoreFSdiskd.cc	2012-07-25 20:56:12 +0000
@@ -42,9 +42,7 @@
 #endif
 
 #include "fs/ufs/StoreFSufs.h"
-
-/** \todo FIXME: break UFSSwapDir out so we don;t need all the extras */
-#include "fs/ufs/ufscommon.h"
+#include "fs/ufs/UFSSwapDir.h"
 
 /**
  \defgroup diskd diskd Storage Filesystem (UFS Based)

=== modified file 'src/fs/rock/RockSwapDir.cc'
--- src/fs/rock/RockSwapDir.cc	2012-06-22 03:49:38 +0000
+++ src/fs/rock/RockSwapDir.cc	2012-08-02 06:19:48 +0000
@@ -18,6 +18,7 @@
 #include "MemObject.h"
 #include "Parsing.h"
 #include "SquidMath.h"
+#include <cstdlib>
 #include <iomanip>
 
 const int64_t Rock::SwapDir::HeaderSize = 16*1024;

=== added file 'src/fs/ufs/RebuildState.cc'
--- src/fs/ufs/RebuildState.cc	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/RebuildState.cc	2012-08-02 14:59:01 +0000
@@ -0,0 +1,541 @@
+/*
+ *
+ * DEBUG: section 47    Store Directory Routines
+ * AUTHOR: Robert Collins
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#include "squid.h"
+#include "RebuildState.h"
+#include "SquidTime.h"
+#include "StoreSwapLogData.h"
+#include "UFSSwapLogParser.h"
+
+CBDATA_CLASS_INIT(RebuildState);
+
+RebuildState::RebuildState(RefCount<UFSSwapDir> aSwapDir) :
+                sd (aSwapDir), LogParser(NULL), e(NULL), fromLog(true), _done (false)
+{
+    /*
+     * If the swap.state file exists in the cache_dir, then
+     * we'll use commonUfsDirRebuildFromSwapLog(), otherwise we'll
+     * use commonUfsDirRebuildFromDirectory() to open up each file
+     * and suck in the meta data.
+     */
+    int clean = 0;
+    int zeroLengthLog = 0;
+    FILE *fp = sd->openTmpSwapLog(&clean, &zeroLengthLog);
+
+    if (fp && !zeroLengthLog)
+        LogParser = UFSSwapLogParser::GetUFSSwapLogParser(fp);
+
+    if (LogParser == NULL ) {
+        fromLog = false;
+
+        if (fp != NULL)
+            fclose(fp);
+
+    } else {
+        fromLog = true;
+        flags.clean = (unsigned int) clean;
+    }
+
+    if (!clean)
+        flags.need_to_validate = 1;
+
+    debugs(47, DBG_IMPORTANT, "Rebuilding storage in " << sd->path << " (" <<
+           (clean ? "clean log" : (LogParser ? "dirty log" : "no log")) << ")");
+}
+
+RebuildState::~RebuildState()
+{
+    sd->closeTmpSwapLog();
+
+    if (LogParser)
+        delete LogParser;
+}
+
+void
+RebuildState::RebuildStep(void *data)
+{
+    RebuildState *rb = (RebuildState *)data;
+    rb->rebuildStep();
+
+    if (!rb->isDone())
+        eventAdd("storeRebuild", RebuildStep, rb, 0.01, 1);
+    else {
+        -- StoreController::store_dirs_rebuilding;
+        storeRebuildComplete(&rb->counts);
+        delete rb;
+    }
+}
+
+/// load entries from swap.state or files until we run out of entries or time
+void
+RebuildState::rebuildStep()
+{
+    currentEntry(NULL);
+
+    // Balance our desire to maximize the number of entries processed at once
+    // (and, hence, minimize overheads and total rebuild time) with a
+    // requirement to also process Coordinator events, disk I/Os, etc.
+    const int maxSpentMsec = 50; // keep small: most RAM I/Os are under 1ms
+    const timeval loopStart = current_time;
+
+    const int totalEntries = LogParser ? LogParser->SwapLogEntries() : -1;
+
+    while (!isDone()) {
+        if (fromLog)
+            rebuildFromSwapLog();
+        else
+            rebuildFromDirectory();
+
+        // TODO: teach storeRebuildProgress to handle totalEntries <= 0
+        if (totalEntries > 0 && (n_read % 4000 == 0))
+            storeRebuildProgress(sd->index, totalEntries, n_read);
+
+        if (opt_foreground_rebuild)
+            continue; // skip "few entries at a time" check below
+
+        getCurrentTime();
+        const double elapsedMsec = tvSubMsec(loopStart, current_time);
+        if (elapsedMsec > maxSpentMsec || elapsedMsec < 0) {
+            debugs(47, 5, HERE << "pausing after " << n_read << " entries in " <<
+                   elapsedMsec << "ms; " << (elapsedMsec/n_read) << "ms per entry");
+            break;
+        }
+    }
+}
+
+/// process one cache file
+void
+RebuildState::rebuildFromDirectory()
+{
+    cache_key key[SQUID_MD5_DIGEST_LENGTH];
+
+    struct stat sb;
+    int fd = -1;
+    assert(this != NULL);
+    debugs(47, 3, HERE << "DIR #" << sd->index);
+
+    assert(fd == -1);
+    sfileno filn = 0;
+    int size;
+    fd = getNextFile(&filn, &size);
+
+    if (fd == -2) {
+        debugs(47, DBG_IMPORTANT, "Done scanning " << sd->path << " dir (" <<
+               n_read << " entries)");
+        _done = true;
+        return;
+    } else if (fd < 0) {
+        return;
+    }
+
+    assert(fd > -1);
+    /* lets get file stats here */
+
+    ++n_read;
+
+    if (fstat(fd, &sb) < 0) {
+        debugs(47, DBG_IMPORTANT, HERE << "fstat(FD " << fd << "): " << xstrerror());
+        file_close(fd);
+        --store_open_disk_fd;
+        fd = -1;
+        return;
+    }
+
+    MemBuf buf;
+    buf.init(SM_PAGE_SIZE, SM_PAGE_SIZE);
+    if (!storeRebuildLoadEntry(fd, sd->index, buf, counts))
+        return;
+
+    StoreEntry tmpe;
+    const bool loaded = storeRebuildParseEntry(buf, tmpe, key, counts,
+                        (int64_t)sb.st_size);
+
+    file_close(fd);
+    --store_open_disk_fd;
+    fd = -1;
+
+    if (!loaded) {
+        // XXX: shouldn't this be a call to commonUfsUnlink?
+        sd->unlinkFile(filn); // should we unlink in all failure cases?
+        return;
+    }
+
+    if (!storeRebuildKeepEntry(tmpe, key, counts))
+        return;
+
+    ++counts.objcount;
+    // tmpe.dump(5);
+    currentEntry(sd->addDiskRestore(key,
+                                    filn,
+                                    tmpe.swap_file_sz,
+                                    tmpe.expires,
+                                    tmpe.timestamp,
+                                    tmpe.lastref,
+                                    tmpe.lastmod,
+                                    tmpe.refcount,  /* refcount */
+                                    tmpe.flags,     /* flags */
+                                    (int) flags.clean));
+    storeDirSwapLog(currentEntry(), SWAP_LOG_ADD);
+}
+
+StoreEntry *
+RebuildState::currentEntry() const
+{
+    return e;
+}
+
+void
+RebuildState::currentEntry(StoreEntry *newValue)
+{
+    e = newValue;
+}
+
+/// process one swap log entry
+void
+RebuildState::rebuildFromSwapLog()
+{
+    StoreSwapLogData swapData;
+
+    if (LogParser->ReadRecord(swapData) != 1) {
+        debugs(47, DBG_IMPORTANT, "Done reading " << sd->path << " swaplog (" << n_read << " entries)");
+        LogParser->Close();
+        delete LogParser;
+        LogParser = NULL;
+        _done = true;
+        return;
+    }
+
+    ++n_read;
+
+    if (!swapData.sane()) {
+        ++counts.invalid;
+        return;
+    }
+
+    /*
+     * BC: during 2.4 development, we changed the way swap file
+     * numbers are assigned and stored.  The high 16 bits used
+     * to encode the SD index number.  There used to be a call
+     * to storeDirProperFileno here that re-assigned the index
+     * bits.  Now, for backwards compatibility, we just need
+     * to mask it off.
+     */
+    swapData.swap_filen &= 0x00FFFFFF;
+
+    debugs(47, 3, HERE << swap_log_op_str[(int) swapData.op]  << " " <<
+           storeKeyText(swapData.key)  << " "<< std::setfill('0') <<
+           std::hex << std::uppercase << std::setw(8) <<
+           swapData.swap_filen);
+
+    if (swapData.op == SWAP_LOG_ADD) {
+        (void) 0;
+    } else if (swapData.op == SWAP_LOG_DEL) {
+        /* Delete unless we already have a newer copy anywhere in any store */
+        /* this needs to become
+         * 1) unpack url
+         * 2) make synthetic request with headers ?? or otherwise search
+         * for a matching object in the store
+         * TODO FIXME change to new async api
+         */
+        currentEntry (Store::Root().get(swapData.key));
+
+        if (currentEntry() != NULL && swapData.lastref >= e->lastref) {
+            undoAdd();
+            --counts.objcount;
+            ++counts.cancelcount;
+        }
+        return;
+    } else {
+        const double
+        x = ::log(static_cast<double>(++counts.bad_log_op)) / ::log(10.0);
+
+        if (0.0 == x - (double) (int) x)
+            debugs(47, DBG_IMPORTANT, "WARNING: " << counts.bad_log_op << " invalid swap log entries found");
+
+        ++counts.invalid;
+
+        return;
+    }
+
+    ++counts.scancount; // XXX: should not this be incremented earlier?
+
+    if (!sd->validFileno(swapData.swap_filen, 0)) {
+        ++counts.invalid;
+        return;
+    }
+
+    if (EBIT_TEST(swapData.flags, KEY_PRIVATE)) {
+        ++counts.badflags;
+        return;
+    }
+
+    /* this needs to become
+     * 1) unpack url
+     * 2) make synthetic request with headers ?? or otherwise search
+     * for a matching object in the store
+     * TODO FIXME change to new async api
+     */
+    currentEntry (Store::Root().get(swapData.key));
+
+    int used;           /* is swapfile already in use? */
+
+    used = sd->mapBitTest(swapData.swap_filen);
+
+    /* If this URL already exists in the cache, does the swap log
+     * appear to have a newer entry?  Compare 'lastref' from the
+     * swap log to e->lastref. */
+    /* is the log entry newer than current entry? */
+    int disk_entry_newer = currentEntry() ? (swapData.lastref > currentEntry()->lastref ? 1 : 0) : 0;
+
+    if (used && !disk_entry_newer) {
+        /* log entry is old, ignore it */
+        ++counts.clashcount;
+        return;
+    } else if (used && currentEntry() && currentEntry()->swap_filen == swapData.swap_filen && currentEntry()->swap_dirn == sd->index) {
+        /* swapfile taken, same URL, newer, update meta */
+
+        if (currentEntry()->store_status == STORE_OK) {
+            currentEntry()->lastref = swapData.timestamp;
+            currentEntry()->timestamp = swapData.timestamp;
+            currentEntry()->expires = swapData.expires;
+            currentEntry()->lastmod = swapData.lastmod;
+            currentEntry()->flags = swapData.flags;
+            currentEntry()->refcount += swapData.refcount;
+            sd->dereference(*currentEntry());
+        } else {
+            debug_trap("commonUfsDirRebuildFromSwapLog: bad condition");
+            debugs(47, DBG_IMPORTANT, HERE << "bad condition");
+        }
+        return;
+    } else if (used) {
+        /* swapfile in use, not by this URL, log entry is newer */
+        /* This is sorta bad: the log entry should NOT be newer at this
+         * point.  If the log is dirty, the filesize check should have
+         * caught this.  If the log is clean, there should never be a
+         * newer entry. */
+        debugs(47, DBG_IMPORTANT, "WARNING: newer swaplog entry for dirno " <<
+               sd->index  << ", fileno "<< std::setfill('0') << std::hex <<
+               std::uppercase << std::setw(8) << swapData.swap_filen);
+
+        /* I'm tempted to remove the swapfile here just to be safe,
+         * but there is a bad race condition in the NOVM version if
+         * the swapfile has recently been opened for writing, but
+         * not yet opened for reading.  Because we can't map
+         * swapfiles back to StoreEntrys, we don't know the state
+         * of the entry using that file.  */
+        /* We'll assume the existing entry is valid, probably because
+         * were in a slow rebuild and the the swap file number got taken
+         * and the validation procedure hasn't run. */
+        assert(flags.need_to_validate);
+        ++counts.clashcount;
+        return;
+    } else if (currentEntry() && !disk_entry_newer) {
+        /* key already exists, current entry is newer */
+        /* keep old, ignore new */
+        ++counts.dupcount;
+        return;
+    } else if (currentEntry()) {
+        /* key already exists, this swapfile not being used */
+        /* junk old, load new */
+        undoAdd();
+        --counts.objcount;
+        ++counts.dupcount;
+    } else {
+        /* URL doesnt exist, swapfile not in use */
+        /* load new */
+        (void) 0;
+    }
+
+    ++counts.objcount;
+
+    currentEntry(sd->addDiskRestore(swapData.key,
+                                    swapData.swap_filen,
+                                    swapData.swap_file_sz,
+                                    swapData.expires,
+                                    swapData.timestamp,
+                                    swapData.lastref,
+                                    swapData.lastmod,
+                                    swapData.refcount,
+                                    swapData.flags,
+                                    (int) flags.clean));
+
+    storeDirSwapLog(currentEntry(), SWAP_LOG_ADD);
+}
+
+/// undo the effects of adding an entry in rebuildFromSwapLog()
+void
+RebuildState::undoAdd()
+{
+    StoreEntry *added = currentEntry();
+    assert(added);
+    currentEntry(NULL);
+
+    // TODO: Why bother with these two if we are going to release?!
+    added->expireNow();
+    added->releaseRequest();
+
+    if (added->swap_filen > -1) {
+        UFSSwapDir *sde = dynamic_cast<UFSSwapDir *>(INDEXSD(added->swap_dirn));
+        assert(sde);
+        sde->undoAddDiskRestore(added);
+    }
+
+    added->release();
+}
+
+int
+RebuildState::getNextFile(sfileno * filn_p, int *size)
+{
+    int fd = -1;
+    int dirs_opened = 0;
+    debugs(47, 3, HERE << "flag=" << flags.init  << ", " <<
+           sd->index  << ": /"<< std::setfill('0') << std::hex <<
+           std::uppercase << std::setw(2) << curlvl1  << "/" << std::setw(2) <<
+           curlvl2);
+
+    if (done)
+        return -2;
+
+    while (fd < 0 && done == 0) {
+        fd = -1;
+
+        if (0 == flags.init) {  /* initialize, open first file */
+            done = 0;
+            curlvl1 = 0;
+            curlvl2 = 0;
+            in_dir = 0;
+            flags.init = 1;
+            assert(Config.cacheSwap.n_configured > 0);
+        }
+
+        if (0 == in_dir) {  /* we need to read in a new directory */
+            snprintf(fullpath, MAXPATHLEN, "%s/%02X/%02X",
+                     sd->path,
+                     curlvl1, curlvl2);
+
+            if (dirs_opened)
+                return -1;
+
+            td = opendir(fullpath);
+
+            ++dirs_opened;
+
+            if (td == NULL) {
+                debugs(47, DBG_IMPORTANT, HERE << "error in opendir (" << fullpath << "): " << xstrerror());
+            } else {
+                entry = readdir(td);    /* skip . and .. */
+                entry = readdir(td);
+
+                if (entry == NULL && errno == ENOENT)
+                    debugs(47, DBG_IMPORTANT, HERE << "WARNING: directory does not exist!");
+                debugs(47, 3, HERE << "Directory " << fullpath);
+            }
+        }
+
+        if (td != NULL && (entry = readdir(td)) != NULL) {
+            ++in_dir;
+
+            if (sscanf(entry->d_name, "%x", &fn) != 1) {
+                debugs(47, 3, HERE << "invalid entry " << entry->d_name);
+                continue;
+            }
+
+            if (!UFSSwapDir::FilenoBelongsHere(fn, sd->index, curlvl1, curlvl2)) {
+                debugs(47, 3, HERE << std::setfill('0') <<
+                       std::hex << std::uppercase << std::setw(8) << fn  <<
+                       " does not belong in " << std::dec << sd->index  << "/" <<
+                       curlvl1  << "/" << curlvl2);
+
+                continue;
+            }
+
+            if (sd->mapBitTest(fn)) {
+                debugs(47, 3, HERE << "Locked, continuing with next.");
+                continue;
+            }
+
+            snprintf(fullfilename, MAXPATHLEN, "%s/%s",
+                     fullpath, entry->d_name);
+            debugs(47, 3, HERE << "Opening " << fullfilename);
+            fd = file_open(fullfilename, O_RDONLY | O_BINARY);
+
+            if (fd < 0)
+                debugs(47, DBG_IMPORTANT, HERE << "error opening " << fullfilename << ": " << xstrerror());
+            else
+                ++store_open_disk_fd;
+
+            continue;
+        }
+
+        if (td != NULL)
+            closedir(td);
+
+        td = NULL;
+
+        in_dir = 0;
+
+        if (sd->validL2(++curlvl2))
+            continue;
+
+        curlvl2 = 0;
+
+        if (sd->validL1(++curlvl1))
+            continue;
+
+        curlvl1 = 0;
+
+        done = 1;
+    }
+
+    *filn_p = fn;
+    return fd;
+}
+
+bool
+RebuildState::error() const
+{
+    return false;
+}
+
+bool
+RebuildState::isDone() const
+{
+    return _done;
+}
+
+StoreEntry *
+RebuildState::currentItem()
+{
+    return currentEntry();
+}
+

=== added file 'src/fs/ufs/RebuildState.h'
--- src/fs/ufs/RebuildState.h	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/RebuildState.h	2012-08-04 12:11:57 +0000
@@ -0,0 +1,93 @@
+/*
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#ifndef SQUID_FS_UFS_REBUILDSTATE_H
+#define SQUID_FS_UFS_REBUILDSTATE_H
+
+#include "RefCount.h"
+#include "UFSSwapDir.h"
+#include "structs.h"
+
+class StoreEntry;
+class UFSSwapLogParser;
+
+/// \ingroup UFS
+class RebuildState : public RefCountable
+{
+public:
+    static EVH RebuildStep;
+
+    RebuildState(RefCount<UFSSwapDir> sd);
+    ~RebuildState();
+
+    virtual bool error() const;
+    virtual bool isDone() const;
+    virtual StoreEntry *currentItem();
+
+    RefCount<UFSSwapDir> sd;
+    int n_read;
+    /*    FILE *log;*/
+    UFSSwapLogParser *LogParser;
+    int curlvl1;
+    int curlvl2;
+
+    struct {
+        unsigned int need_to_validate:1;
+        unsigned int clean:1;
+        unsigned int init:1;
+    } flags;
+    int in_dir;
+    int done;
+    int fn;
+
+    dirent_t *entry;
+    DIR *td;
+    char fullpath[MAXPATHLEN];
+    char fullfilename[MAXPATHLEN];
+
+    struct _store_rebuild_data counts;
+
+private:
+    void rebuildFromDirectory();
+    void rebuildFromSwapLog();
+    void rebuildStep();
+    void undoAdd();
+    int getNextFile(sfileno *, int *size);
+    StoreEntry *currentEntry() const;
+    void currentEntry(StoreEntry *);
+    StoreEntry *e;
+    bool fromLog;
+    bool _done;
+    /// \bug (callback) should be hidden behind a proper human readable name
+    void (callback)(void *cbdata);
+    void *cbdata;
+    CBDATA_CLASS2(RebuildState);
+};
+
+#endif /* SQUID_FS_UFS_REBUILDSTATE_H */

=== modified file 'src/fs/ufs/StoreFSufs.cc'
--- src/fs/ufs/StoreFSufs.cc	2012-01-20 18:55:04 +0000
+++ src/fs/ufs/StoreFSufs.cc	2012-07-31 22:17:07 +0000
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * DEBUG: section 47    Store Directory Routines
  * AUTHOR: Robert Collins
  *
@@ -41,13 +39,11 @@
 #endif
 
 #include "fs/ufs/StoreFSufs.h"
+#include "fs/ufs/UFSSwapDir.h"
 
 #if 0
 #include "DiskIO/DiskIOModule.h"
 #endif
 
-/** \todo FIXME: break UFSSwapDir out so we don't build all the extras */
-#include "fs/ufs/ufscommon.h"
-
 /* Unused variable: */
 StoreFSufs<UFSSwapDir> *UfsInstance_foo = NULL;

=== modified file 'src/fs/ufs/StoreFSufs.h'
--- src/fs/ufs/StoreFSufs.h	2009-01-21 03:47:47 +0000
+++ src/fs/ufs/StoreFSufs.h	2012-08-02 21:40:53 +0000
@@ -37,10 +37,10 @@
  \ingroup FileSystems
  */
 
+#include "StoreFileSystem.h"
+
 class DiskIOModule;
 
-#include "StoreFileSystem.h"
-
 /**
  \ingroup UFS, FileSystems
  *
@@ -52,7 +52,6 @@
 template <class TheSwapDir>
 class StoreFSufs : public StoreFileSystem
 {
-
 public:
     static StoreFileSystem &GetInstance();
     StoreFSufs(char const *DefaultModuleType, char const *label);

=== added file 'src/fs/ufs/StoreSearchUFS.cc'
--- src/fs/ufs/StoreSearchUFS.cc	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/StoreSearchUFS.cc	2012-08-02 21:40:53 +0000
@@ -0,0 +1,90 @@
+/*
+ * DEBUG: section 47    Store Directory Routines
+ * AUTHOR: Robert Collins
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ * 
+ */
+
+#include "squid.h"
+#include "cbdata.h"
+#include "StoreSearchUFS.h"
+#include "UFSSwapDir.h"
+
+CBDATA_CLASS_INIT(StoreSearchUFS);
+
+StoreSearchUFS::StoreSearchUFS(RefCount<UFSSwapDir> aSwapDir) :
+        sd(aSwapDir), walker (sd->repl->WalkInit(sd->repl)),
+        current (NULL), _done (false)
+{}
+
+StoreSearchUFS::~StoreSearchUFS()
+{
+    walker->Done(walker);
+    walker = NULL;
+}
+
+void
+StoreSearchUFS::next(void (aCallback)(void *cbdata), void *aCallbackArgs)
+{
+    next();
+    aCallback(aCallbackArgs);
+}
+
+bool
+StoreSearchUFS::next()
+{
+    /* the walker API doesn't make sense. the store entries referred to are already readwrite
+     * from their hash table entries
+     */
+
+    if (walker)
+        current = const_cast<StoreEntry *>(walker->Next(walker));
+
+    if (current == NULL)
+        _done = true;
+
+    return current != NULL;
+}
+
+bool
+StoreSearchUFS::error() const
+{
+    return false;
+}
+
+bool
+StoreSearchUFS::isDone() const
+{
+    return _done;
+}
+
+StoreEntry *
+StoreSearchUFS::currentItem()
+{
+    return current;
+}

=== added file 'src/fs/ufs/StoreSearchUFS.h'
--- src/fs/ufs/StoreSearchUFS.h	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/StoreSearchUFS.h	2012-08-04 12:11:57 +0000
@@ -0,0 +1,76 @@
+/*
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ * 
+ */
+
+#ifndef SQUID_FS_UFS_STORESEARCHUFS_H
+#define SQUID_FS_UFS_STORESEARCHUFS_H
+
+#include "StoreSearch.h"
+#include "UFSSwapDir.h"
+
+/// \ingroup UFS
+class StoreSearchUFS : public StoreSearch
+{
+public:
+    StoreSearchUFS(RefCount<UFSSwapDir> sd);
+    virtual ~StoreSearchUFS();
+
+    /** \todo Iterator API - garh, wrong place */
+    /**
+     * callback the client when a new StoreEntry is available
+     * or an error occurs
+     */
+    virtual void next(void (callback)(void *cbdata), void *cbdata);
+
+    /**
+     \retval true if a new StoreEntry is immediately available
+     \retval false if a new StoreEntry is NOT immediately available
+     */
+    virtual bool next();
+
+    virtual bool error() const;
+    virtual bool isDone() const;
+    virtual StoreEntry *currentItem();
+
+    RefCount<UFSSwapDir> sd;
+    RemovalPolicyWalker *walker;
+
+private:
+    /// \bug (callback) should be hidden behind a proper human readable name
+    void (callback)(void *cbdata);
+    void *cbdata;
+    StoreEntry * current;
+    bool _done;
+
+    StoreSearchUFS(StoreSearchUFS const &); //disabled
+    StoreSearchUFS& operator=(StoreSearchUFS const &); //disabled
+    StoreSearchUFS(); //disabled
+    CBDATA_CLASS2(StoreSearchUFS);
+};
+
+#endif /* SQUID_FS_UFS_STORESEARCHUFS_H */

=== added file 'src/fs/ufs/UFSStoreState.h'
--- src/fs/ufs/UFSStoreState.h	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/UFSStoreState.h	2012-08-04 12:11:57 +0000
@@ -0,0 +1,122 @@
+/*
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#ifndef SQUID_FS_UFS_UFSSTORESTATE_H
+#define SQUID_FS_UFS_UFSSTORESTATE_H
+
+#include "DiskIO/IORequestor.h"
+#include "StoreIOState.h"
+
+/// \ingroup UFS
+class UFSStoreState : public StoreIOState, public IORequestor
+{
+public:
+    void * operator new (size_t);
+    void operator delete (void *);
+    UFSStoreState(SwapDir * SD, StoreEntry * anEntry, STIOCB * callback_, void *callback_data_);
+    ~UFSStoreState();
+    virtual void close(int how);
+    virtual void closeCompleted();
+    // protected:
+    virtual void ioCompletedNotification();
+    virtual void readCompleted(const char *buf, int len, int errflag, RefCount<ReadRequest>);
+    virtual void writeCompleted(int errflag, size_t len, RefCount<WriteRequest>);
+    RefCount<DiskFile> theFile;
+    bool opening;
+    bool creating;
+    bool closing;
+    bool reading;
+    bool writing;
+    void read_(char *buf, size_t size, off_t offset, STRCB * callback, void *callback_data);
+    void write(char const *buf, size_t size, off_t offset, FREE * free_func);
+
+protected:
+    virtual void doCloseCallback (int errflag);
+
+    class _queued_read
+    {
+    public:
+        MEMPROXY_CLASS(UFSStoreState::_queued_read);
+        char *buf;
+        size_t size;
+        off_t offset;
+        STRCB *callback;
+        void *callback_data;
+
+    };
+
+    class _queued_write
+    {
+    public:
+        MEMPROXY_CLASS(UFSStoreState::_queued_write);
+        char const *buf;
+        size_t size;
+        off_t offset;
+        FREE *free_func;
+
+    };
+
+    /** \todo These should be in the IO strategy */
+
+    struct {
+        /**
+         * DPW 2006-05-24
+         * the write_draining flag is used to avoid recursion inside
+         * the UFSStoreState::drainWriteQueue() method.
+         */
+        bool write_draining;
+        /**
+         * DPW 2006-05-24
+         * The try_closing flag is set by UFSStoreState::tryClosing()
+         * when UFSStoreState wants to close the file, but cannot
+         * because of pending I/Os.  If set, UFSStoreState will
+         * try to close again in the I/O callbacks.
+         */
+        bool try_closing;
+    } flags;
+    link_list *pending_reads;
+    link_list *pending_writes;
+    void queueRead(char *, size_t, off_t, STRCB *, void *);
+    void queueWrite(char const *, size_t, off_t, FREE *);
+    bool kickReadQueue();
+    void drainWriteQueue();
+    void tryClosing();
+    char *read_buf;
+
+private:
+    void openDone();
+    void freePending();
+    void doWrite();
+    CBDATA_CLASS(UFSStoreState);
+};
+
+MEMPROXY_CLASS_INLINE(UFSStoreState::_queued_read);
+MEMPROXY_CLASS_INLINE(UFSStoreState::_queued_write);
+
+#endif /* SQUID_FS_UFS_UFSSTORESTATE_H */

=== added file 'src/fs/ufs/UFSStrategy.cc'
--- src/fs/ufs/UFSStrategy.cc	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/UFSStrategy.cc	2012-08-02 18:24:15 +0000
@@ -0,0 +1,183 @@
+/*
+ * DEBUG: section 47    Store Directory Routines
+ * AUTHOR: Robert Collins
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ */
+
+#include "squid.h"
+
+#include "DiskIO/DiskIOStrategy.h"
+#include "UFSStrategy.h"
+#include "UFSStoreState.h"
+#include "UFSSwapDir.h"
+
+bool
+UFSStrategy::shedLoad()
+{
+    return io->shedLoad();
+}
+
+int
+UFSStrategy::load()
+{
+    return io->load();
+}
+
+UFSStrategy::UFSStrategy (DiskIOStrategy *anIO) : io(anIO)
+{}
+
+UFSStrategy::~UFSStrategy ()
+{
+    delete io;
+}
+
+StoreIOState::Pointer
+UFSStrategy::createState(SwapDir *SD, StoreEntry *e, StoreIOState::STIOCB * aCallback, void *callback_data) const
+{
+    return new UFSStoreState (SD, e, aCallback, callback_data);
+}
+
+DiskFile::Pointer
+UFSStrategy::newFile (char const *path)
+{
+    return io->newFile(path);
+}
+
+void
+UFSStrategy::unlinkFile(char const *path)
+{
+    io->unlinkFile(path);
+}
+
+StoreIOState::Pointer
+UFSStrategy::open(SwapDir * SD, StoreEntry * e, StoreIOState::STFNCB * file_callback,
+                  StoreIOState::STIOCB * aCallback, void *callback_data)
+{
+    assert (((UFSSwapDir *)SD)->IO == this);
+    debugs(79, 3, HERE << "fileno "<< std::setfill('0') << std::hex
+            << std::uppercase << std::setw(8) << e->swap_filen);
+
+    /* to consider: make createstate a private UFSStrategy call */
+    StoreIOState::Pointer sio = createState (SD, e, aCallback, callback_data);
+
+    sio->mode |= O_RDONLY;
+
+    UFSStoreState *state = dynamic_cast <UFSStoreState *>(sio.getRaw());
+
+    assert (state);
+
+    char *path = ((UFSSwapDir *)SD)->fullPath(e->swap_filen, NULL);
+
+    DiskFile::Pointer myFile = newFile (path);
+
+    if (myFile.getRaw() == NULL)
+        return NULL;
+
+    state->theFile = myFile;
+
+    state->opening = true;
+
+    myFile->open (sio->mode, 0644, state);
+
+    if (myFile->error())
+        return NULL;
+
+    return sio;
+}
+
+StoreIOState::Pointer
+UFSStrategy::create(SwapDir * SD, StoreEntry * e, StoreIOState::STFNCB * file_callback,
+                    StoreIOState::STIOCB * aCallback, void *callback_data)
+{
+    assert (((UFSSwapDir *)SD)->IO == this);
+    /* Allocate a number */
+    sfileno filn = ((UFSSwapDir *)SD)->mapBitAllocate();
+    debugs(79, 3, HERE << "fileno "<< std::setfill('0') <<
+            std::hex << std::uppercase << std::setw(8) << filn);
+
+    /* Shouldn't we handle a 'bitmap full' error here? */
+
+    StoreIOState::Pointer sio = createState (SD, e, aCallback, callback_data);
+
+    sio->mode |= O_WRONLY | O_CREAT | O_TRUNC;
+
+    sio->swap_filen = filn;
+
+    UFSStoreState *state = dynamic_cast <UFSStoreState *>(sio.getRaw());
+
+    assert (state);
+
+    char *path = ((UFSSwapDir *)SD)->fullPath(filn, NULL);
+
+    DiskFile::Pointer myFile = newFile (path);
+
+    if (myFile.getRaw() == NULL) {
+        ((UFSSwapDir *)SD)->mapBitReset (filn);
+        return NULL;
+    }
+
+    state->theFile = myFile;
+
+    state->creating = true;
+
+    myFile->create (state->mode, 0644, state);
+
+    if (myFile->error()) {
+        ((UFSSwapDir *)SD)->mapBitReset (filn);
+        return NULL;
+    }
+
+    /* now insert into the replacement policy */
+    ((UFSSwapDir *)SD)->replacementAdd(e);
+
+    return sio;
+}
+
+int
+UFSStrategy::callback()
+{
+    return io->callback();
+}
+
+void
+UFSStrategy::init()
+{
+    io->init();
+}
+
+void
+UFSStrategy::sync()
+{
+    io->sync();
+}
+
+void
+UFSStrategy::statfs(StoreEntry & sentry)const
+{
+    io->statfs(sentry);
+}

=== added file 'src/fs/ufs/UFSStrategy.h'
--- src/fs/ufs/UFSStrategy.h	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/UFSStrategy.h	2012-08-02 21:40:53 +0000
@@ -0,0 +1,83 @@
+/*
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#ifndef SQUID_FS_UFS_UFSSTRATEGY_H
+#define SQUID_FS_UFS_UFSSTRATEGY_H
+
+#include "DiskIO/DiskFile.h"
+#include "StoreIOState.h"
+
+class Swapdir;
+class StoreEntry;
+class DiskIOStrategy;
+
+/// \ingroup UFS
+class UFSStrategy
+{
+public:
+    UFSStrategy (DiskIOStrategy *);
+    virtual ~UFSStrategy ();
+    virtual bool shedLoad();
+
+    virtual int load();
+
+    StoreIOState::Pointer createState(SwapDir *SD, StoreEntry *e, StoreIOState::STIOCB * callback, void *callback_data) const;
+    /* UFS specific */
+    virtual RefCount<DiskFile> newFile (char const *path);
+    StoreIOState::Pointer open(SwapDir *, StoreEntry *, StoreIOState::STFNCB *,
+                               StoreIOState::STIOCB *, void *);
+    StoreIOState::Pointer create(SwapDir *, StoreEntry *, StoreIOState::STFNCB *,
+                                 StoreIOState::STIOCB *, void *);
+
+    virtual void unlinkFile (char const *);
+    virtual void sync();
+
+    virtual int callback();
+
+    /** Init per-instance logic */
+    virtual void init();
+
+    /** cachemgr output on the IO instance stats */
+    virtual void statfs(StoreEntry & sentry)const;
+
+    /** The io strategy in use */
+    DiskIOStrategy *io;
+
+protected:
+
+    friend class UFSSwapDir;
+
+private:
+    UFSStrategy(); //disabled
+    UFSStrategy(UFSStrategy const &); //disabled
+    UFSStrategy &operator=(UFSStrategy const &); //disabled
+
+};
+
+#endif /* SQUID_FS_UFS_UFSSTRATEGY_H */

=== added file 'src/fs/ufs/UFSSwapDir.cc'
--- src/fs/ufs/UFSSwapDir.cc	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/UFSSwapDir.cc	2012-08-03 15:41:59 +0000
@@ -0,0 +1,1350 @@
+/*
+ * DEBUG: section 47    Store Directory Routines
+ * AUTHOR: Robert Collins
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ */
+
+#include "squid-old.h"
+
+#define CLEAN_BUF_SZ 16384
+
+#include "ConfigOption.h"
+#include "DiskIO/DiskIOModule.h"
+#include "FileMap.h"
+#include "fde.h"
+#include "Parsing.h"
+#include "protos.h"
+#include "RebuildState.h"
+#include "SquidMath.h"
+#include "DiskIO/DiskIOStrategy.h"
+#include "StoreSearchUFS.h"
+#include "StoreSwapLogData.h"
+#include "SquidTime.h"
+#include "StatCounters.h"
+#include "UFSSwapDir.h"
+
+
+int UFSSwapDir::NumberOfUFSDirs = 0;
+int *UFSSwapDir::UFSDirToGlobalDirMapping = NULL;
+
+class UFSCleanLog : public SwapDir::CleanLog
+{
+
+public:
+    UFSCleanLog(SwapDir *);
+    /** Get the next entry that is a candidate for clean log writing
+     */
+    virtual const StoreEntry *nextEntry();
+    /** "write" an entry to the clean log file.
+     */
+    virtual void write(StoreEntry const &);
+    char *cur;
+    char *newLog;
+    char *cln;
+    char *outbuf;
+    off_t outbuf_offset;
+    int fd;
+    RemovalPolicyWalker *walker;
+    SwapDir *sd;
+};
+
+UFSCleanLog::UFSCleanLog(SwapDir *aSwapDir) :
+                cur(NULL), newLog(NULL), cln(NULL), outbuf(NULL),
+                outbuf_offset(0), fd(-1),walker(NULL), sd(aSwapDir)
+{}
+
+const StoreEntry *
+UFSCleanLog::nextEntry()
+{
+    const StoreEntry *entry = NULL;
+
+    if (walker)
+        entry = walker->Next(walker);
+
+    return entry;
+}
+
+void
+UFSCleanLog::write(StoreEntry const &e)
+{
+    StoreSwapLogData s;
+    static size_t ss = sizeof(StoreSwapLogData);
+    s.op = (char) SWAP_LOG_ADD;
+    s.swap_filen = e.swap_filen;
+    s.timestamp = e.timestamp;
+    s.lastref = e.lastref;
+    s.expires = e.expires;
+    s.lastmod = e.lastmod;
+    s.swap_file_sz = e.swap_file_sz;
+    s.refcount = e.refcount;
+    s.flags = e.flags;
+    memcpy(&s.key, e.key, SQUID_MD5_DIGEST_LENGTH);
+    s.finalize();
+    memcpy(outbuf + outbuf_offset, &s, ss);
+    outbuf_offset += ss;
+    /* buffered write */
+
+    if (outbuf_offset + ss >= CLEAN_BUF_SZ) {
+        if (FD_WRITE_METHOD(fd, outbuf, outbuf_offset) < 0) {
+            /* XXX This error handling should probably move up to the caller */
+            debugs(50, DBG_CRITICAL, HERE << newLog << ": write: " << xstrerror());
+            debugs(50, DBG_CRITICAL, HERE << "Current swap logfile not replaced.");
+            file_close(fd);
+            fd = -1;
+            unlink(newLog);
+            sd->cleanLog = NULL;
+            delete this;
+            return;
+        }
+
+        outbuf_offset = 0;
+    }
+}
+
+bool
+UFSSwapDir::canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const
+{
+    if (!SwapDir::canStore(e, diskSpaceNeeded, load))
+        return false;
+
+    if (IO->shedLoad())
+        return false;
+
+    load = IO->load();
+    return true;
+}
+
+static void
+FreeObject(void *address)
+{
+    StoreSwapLogData *anObject = static_cast <StoreSwapLogData *>(address);
+    delete anObject;
+}
+
+static QS rev_int_sort;
+static int
+rev_int_sort(const void *A, const void *B)
+{
+    const int *i1 = (const int *)A;
+    const int *i2 = (const int *)B;
+    return *i2 - *i1;
+}
+
+void
+UFSSwapDir::parseSizeL1L2()
+{
+    int i = GetInteger();
+    if (i <= 0)
+        fatal("UFSSwapDir::parseSizeL1L2: invalid size value");
+
+    const uint64_t size = static_cast<uint64_t>(i) << 20; // MBytes to Bytes
+
+    /* just reconfigure it */
+    if (reconfiguring) {
+        if (size == maxSize())
+            debugs(3, 2, "Cache dir '" << path << "' size remains unchanged at " << i << " MB");
+        else
+            debugs(3, DBG_IMPORTANT, "Cache dir '" << path << "' size changed to " << i << " MB");
+    }
+
+    max_size = size;
+
+    l1 = GetInteger();
+
+    if (l1 <= 0)
+        fatal("UFSSwapDir::parseSizeL1L2: invalid level 1 directories value");
+
+    l2 = GetInteger();
+
+    if (l2 <= 0)
+        fatal("UFSSwapDir::parseSizeL1L2: invalid level 2 directories value");
+}
+
+void
+UFSSwapDir::reconfigure()
+{
+    parseSizeL1L2();
+    parseOptions(1);
+}
+
+void
+UFSSwapDir::parse (int anIndex, char *aPath)
+{
+    index = anIndex;
+    path = xstrdup(aPath);
+
+    parseSizeL1L2();
+
+    /* Initialise replacement policy stuff */
+    repl = createRemovalPolicy(Config.replPolicy);
+
+    parseOptions(0);
+}
+
+void
+UFSSwapDir::changeIO(DiskIOModule *module)
+{
+    DiskIOStrategy *anIO = module->createStrategy();
+    safe_free(ioType);
+    ioType = xstrdup(module->type());
+
+    delete IO->io;
+    IO->io = anIO;
+    /* Change the IO Options */
+
+    if (currentIOOptions && currentIOOptions->options.size() > 2)
+        delete currentIOOptions->options.pop_back();
+
+    /* TODO: factor out these 4 lines */
+    ConfigOption *ioOptions = IO->io->getOptionTree();
+
+    if (ioOptions)
+        currentIOOptions->options.push_back(ioOptions);
+}
+
+bool
+UFSSwapDir::optionIOParse(char const *option, const char *value, int isaReconfig)
+{
+    if (strcmp(option, "IOEngine") != 0)
+        return false;
+
+    if (isaReconfig)
+        /* silently ignore this */
+        return true;
+
+    if (!value)
+        self_destruct();
+
+    DiskIOModule *module = DiskIOModule::Find(value);
+
+    if (!module)
+        self_destruct();
+
+    changeIO(module);
+
+    return true;
+}
+
+void
+UFSSwapDir::optionIODump(StoreEntry * e) const
+{
+    storeAppendPrintf(e, " IOEngine=%s", ioType);
+}
+
+ConfigOption *
+UFSSwapDir::getOptionTree() const
+{
+    ConfigOption *parentResult = SwapDir::getOptionTree();
+
+    if (currentIOOptions == NULL)
+        currentIOOptions = new ConfigOptionVector();
+
+    currentIOOptions->options.push_back(parentResult);
+
+    currentIOOptions->options.push_back(new ConfigOptionAdapter<UFSSwapDir>(*const_cast<UFSSwapDir *>(this), &UFSSwapDir::optionIOParse, &UFSSwapDir::optionIODump));
+
+    if (ConfigOption *ioOptions = IO->io->getOptionTree())
+        currentIOOptions->options.push_back(ioOptions);
+
+    ConfigOption* result = currentIOOptions;
+
+    currentIOOptions = NULL;
+
+    return result;
+}
+
+void
+UFSSwapDir::init()
+{
+    debugs(47, 3, HERE << "Initialising UFS SwapDir engine.");
+    /* Parsing must be finished by now - force to NULL, don't delete */
+    currentIOOptions = NULL;
+    static int started_clean_event = 0;
+    static const char *errmsg =
+        "\tFailed to verify one of the swap directories, Check cache.log\n"
+        "\tfor details.  Run 'squid -z' to create swap directories\n"
+        "\tif needed, or if running Squid for the first time.";
+    IO->init();
+
+    if (verifyCacheDirs())
+        fatal(errmsg);
+
+    openLog();
+
+    rebuild();
+
+    if (!started_clean_event) {
+        eventAdd("UFS storeDirClean", CleanEvent, NULL, 15.0, 1);
+        started_clean_event = 1;
+    }
+
+    (void) storeDirGetBlkSize(path, &fs.blksize);
+}
+
+void
+UFSSwapDir::create()
+{
+    debugs(47, 3, "Creating swap space in " << path);
+    createDirectory(path, 0);
+    createSwapSubDirs();
+}
+
+UFSSwapDir::UFSSwapDir(char const *aType, const char *anIOType) : SwapDir(aType), IO(NULL), map(new FileMap()), suggest(0), swaplog_fd (-1), currentIOOptions(new ConfigOptionVector()), ioType(xstrdup(anIOType)), cur_size(0), n_disk_objects(0)
+{
+    /* modulename is only set to disk modules that are built, by configure,
+     * so the Find call should never return NULL here.
+     */
+    IO = new UFSStrategy(DiskIOModule::Find(anIOType)->createStrategy());
+}
+
+UFSSwapDir::~UFSSwapDir()
+{
+    if (swaplog_fd > -1) {
+        file_close(swaplog_fd);
+        swaplog_fd = -1;
+    }
+
+    delete map;
+
+    if (IO)
+        delete IO;
+
+    IO = NULL;
+
+    safe_free(ioType);
+}
+
+void
+UFSSwapDir::dumpEntry(StoreEntry &e) const
+{
+    debugs(47, DBG_CRITICAL, HERE << "FILENO "<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << e.swap_filen);
+    debugs(47, DBG_CRITICAL, HERE << "PATH " << fullPath(e.swap_filen, NULL)   );
+    e.dump(0);
+}
+
+bool
+UFSSwapDir::doubleCheck(StoreEntry & e)
+{
+
+    struct stat sb;
+
+    if (::stat(fullPath(e.swap_filen, NULL), &sb) < 0) {
+        debugs(47, DBG_CRITICAL, HERE << "WARNING: Missing swap file");
+        dumpEntry(e);
+        return true;
+    }
+
+    if ((off_t)e.swap_file_sz != sb.st_size) {
+        debugs(47, DBG_CRITICAL, HERE << "WARNING: Size Mismatch. Entry size: "
+                << e.swap_file_sz << ", file size: " << sb.st_size);
+        dumpEntry(e);
+        return true;
+    }
+
+    return false;
+}
+
+void
+UFSSwapDir::statfs(StoreEntry & sentry) const
+{
+    int totl_kb = 0;
+    int free_kb = 0;
+    int totl_in = 0;
+    int free_in = 0;
+    int x;
+    storeAppendPrintf(&sentry, "First level subdirectories: %d\n", l1);
+    storeAppendPrintf(&sentry, "Second level subdirectories: %d\n", l2);
+    storeAppendPrintf(&sentry, "Maximum Size: %" PRIu64 " KB\n", maxSize() >> 10);
+    storeAppendPrintf(&sentry, "Current Size: %.2f KB\n", currentSize() / 1024.0);
+    storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n",
+                      Math::doublePercent(currentSize(), maxSize()));
+    storeAppendPrintf(&sentry, "Filemap bits in use: %d of %d (%d%%)\n",
+                      map->numFilesInMap(), map->capacity(),
+                      Math::intPercent(map->numFilesInMap(), map->capacity()));
+    x = storeDirGetUFSStats(path, &totl_kb, &free_kb, &totl_in, &free_in);
+
+    if (0 == x) {
+        storeAppendPrintf(&sentry, "Filesystem Space in use: %d/%d KB (%d%%)\n",
+                          totl_kb - free_kb,
+                          totl_kb,
+                          Math::intPercent(totl_kb - free_kb, totl_kb));
+        storeAppendPrintf(&sentry, "Filesystem Inodes in use: %d/%d (%d%%)\n",
+                          totl_in - free_in,
+                          totl_in,
+                          Math::intPercent(totl_in - free_in, totl_in));
+    }
+
+    storeAppendPrintf(&sentry, "Flags:");
+
+    if (flags.selected)
+        storeAppendPrintf(&sentry, " SELECTED");
+
+    if (flags.read_only)
+        storeAppendPrintf(&sentry, " READ-ONLY");
+
+    storeAppendPrintf(&sentry, "\n");
+
+    IO->statfs(sentry);
+}
+
+void
+UFSSwapDir::maintain()
+{
+    /* We can't delete objects while rebuilding swap */
+
+    /* XXX FIXME each store should start maintaining as it comes online. */
+
+    if (StoreController::store_dirs_rebuilding)
+        return;
+
+    StoreEntry *e = NULL;
+
+    int removed = 0;
+
+    RemovalPurgeWalker *walker;
+
+    double f = (double) (currentSize() - minSize()) / (maxSize() - minSize());
+
+    f = f < 0.0 ? 0.0 : f > 1.0 ? 1.0 : f;
+
+    int max_scan = (int) (f * 400.0 + 100.0);
+
+    int max_remove = (int) (f * 70.0 + 10.0);
+
+    /*
+     * This is kinda cheap, but so we need this priority hack?
+     */
+
+    debugs(47, 3, HERE << "f=" << f << ", max_scan=" << max_scan << ", max_remove=" << max_remove  );
+
+    walker = repl->PurgeInit(repl, max_scan);
+
+    while (1) {
+        if (currentSize() < minSize())
+            break;
+
+        if (removed >= max_remove)
+            break;
+
+        e = walker->Next(walker);
+
+        if (!e)
+            break;      /* no more objects */
+
+        ++removed;
+
+        e->release();
+    }
+
+    walker->Done(walker);
+    debugs(47, (removed ? 2 : 3), HERE << path <<
+           " removed " << removed << "/" << max_remove << " f=" <<
+           std::setprecision(4) << f << " max_scan=" << max_scan);
+}
+
+void
+UFSSwapDir::reference(StoreEntry &e)
+{
+    debugs(47, 3, HERE << "referencing " << &e << " " <<
+            e.swap_dirn << "/" << e.swap_filen);
+
+    if (repl->Referenced)
+        repl->Referenced(repl, &e, &e.repl);
+}
+
+bool
+UFSSwapDir::dereference(StoreEntry & e)
+{
+    debugs(47, 3, HERE << "dereferencing " << &e << " " <<
+            e.swap_dirn << "/" << e.swap_filen);
+
+    if (repl->Dereferenced)
+        repl->Dereferenced(repl, &e, &e.repl);
+
+    return true; // keep e in the global store_table
+}
+
+StoreIOState::Pointer
+UFSSwapDir::createStoreIO(StoreEntry &e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * aCallback, void *callback_data)
+{
+    return IO->create (this, &e, file_callback, aCallback, callback_data);
+}
+
+StoreIOState::Pointer
+UFSSwapDir::openStoreIO(StoreEntry &e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * aCallback, void *callback_data)
+{
+    return IO->open (this, &e, file_callback, aCallback, callback_data);
+}
+
+int
+UFSSwapDir::mapBitTest(sfileno filn)
+{
+    return map->testBit(filn);
+}
+
+void
+UFSSwapDir::mapBitSet(sfileno filn)
+{
+    map->setBit(filn);
+}
+
+void
+UFSSwapDir::mapBitReset(sfileno filn)
+{
+    /*
+     * We have to test the bit before calling clearBit as
+     * it doesn't do bounds checking and blindly assumes
+     * filn is a valid file number, but it might not be because
+     * the map is dynamic in size.  Also clearing an already clear
+     * bit puts the map counter of-of-whack.
+     */
+
+    if (map->testBit(filn))
+        map->clearBit(filn);
+}
+
+int
+UFSSwapDir::mapBitAllocate()
+{
+    int fn;
+    fn = map->allocate(suggest);
+    map->setBit(fn);
+    suggest = fn + 1;
+    return fn;
+}
+
+char *
+UFSSwapDir::swapSubDir(int subdirn)const
+{
+    LOCAL_ARRAY(char, fullfilename, MAXPATHLEN);
+    assert(0 <= subdirn && subdirn < l1);
+    snprintf(fullfilename, MAXPATHLEN, "%s/%02X", path, subdirn);
+    return fullfilename;
+}
+
+int
+UFSSwapDir::createDirectory(const char *aPath, int should_exist)
+{
+    int created = 0;
+
+    struct stat st;
+    getCurrentTime();
+
+    if (0 == ::stat(aPath, &st)) {
+        if (S_ISDIR(st.st_mode)) {
+            debugs(47, (should_exist ? 3 : DBG_IMPORTANT), aPath << " exists");
+        } else {
+            fatalf("Swap directory %s is not a directory.", aPath);
+        }
+
+#if _SQUID_MSWIN_
+
+    } else if (0 == mkdir(aPath)) {
+#else
+
+    } else if (0 == mkdir(aPath, 0755)) {
+#endif
+        debugs(47, (should_exist ? DBG_IMPORTANT : 3), aPath << " created");
+        created = 1;
+    } else {
+        fatalf("Failed to make swap directory %s: %s",
+               aPath, xstrerror());
+    }
+
+    return created;
+}
+
+bool
+UFSSwapDir::pathIsDirectory(const char *aPath)const
+{
+
+    struct stat sb;
+
+    if (::stat(aPath, &sb) < 0) {
+        debugs(47, DBG_CRITICAL, "ERROR: " << aPath << ": " << xstrerror());
+        return false;
+    }
+
+    if (S_ISDIR(sb.st_mode) == 0) {
+        debugs(47, DBG_CRITICAL, "WARNING: " << aPath << " is not a directory");
+        return false;
+    }
+
+    return true;
+}
+
+bool
+UFSSwapDir::verifyCacheDirs()
+{
+    if (!pathIsDirectory(path))
+        return true;
+
+    for (int j = 0; j < l1; ++j) {
+        char const *aPath = swapSubDir(j);
+
+        if (!pathIsDirectory(aPath))
+            return true;
+    }
+
+    return false;
+}
+
+void
+UFSSwapDir::createSwapSubDirs()
+{
+    LOCAL_ARRAY(char, name, MAXPATHLEN);
+
+    for (int i = 0; i < l1; ++i) {
+        snprintf(name, MAXPATHLEN, "%s/%02X", path, i);
+
+        int should_exist;
+
+        if (createDirectory(name, 0))
+            should_exist = 0;
+        else
+            should_exist = 1;
+
+        debugs(47, DBG_IMPORTANT, "Making directories in " << name);
+
+        for (int k = 0; k < l2; ++k) {
+            snprintf(name, MAXPATHLEN, "%s/%02X/%02X", path, i, k);
+            createDirectory(name, should_exist);
+        }
+    }
+}
+
+char *
+UFSSwapDir::logFile(char const *ext) const
+{
+    LOCAL_ARRAY(char, lpath, MAXPATHLEN);
+    LOCAL_ARRAY(char, pathtmp, MAXPATHLEN);
+    LOCAL_ARRAY(char, digit, 32);
+    char *pathtmp2;
+
+    if (Config.Log.swap) {
+        xstrncpy(pathtmp, path, MAXPATHLEN - 64);
+        pathtmp2 = pathtmp;
+
+        while ((pathtmp2 = strchr(pathtmp2, '/')) != NULL)
+            *pathtmp2 = '.';
+
+        while (strlen(pathtmp) && pathtmp[strlen(pathtmp) - 1] == '.')
+            pathtmp[strlen(pathtmp) - 1] = '\0';
+
+        for (pathtmp2 = pathtmp; *pathtmp2 == '.'; ++pathtmp2);
+        snprintf(lpath, MAXPATHLEN - 64, Config.Log.swap, pathtmp2);
+
+        if (strncmp(lpath, Config.Log.swap, MAXPATHLEN - 64) == 0) {
+            strcat(lpath, ".");
+            snprintf(digit, 32, "%02d", index);
+            strncat(lpath, digit, 3);
+        }
+    } else {
+        xstrncpy(lpath, path, MAXPATHLEN - 64);
+        strcat(lpath, "/swap.state");
+    }
+
+    if (ext)
+        strncat(lpath, ext, 16);
+
+    return lpath;
+}
+
+void
+UFSSwapDir::openLog()
+{
+    char *logPath;
+    logPath = logFile();
+    swaplog_fd = file_open(logPath, O_WRONLY | O_CREAT | O_BINARY);
+
+    if (swaplog_fd < 0) {
+        debugs(50, DBG_IMPORTANT, "ERROR opening swap log " << logPath << ": " << xstrerror());
+        fatal("UFSSwapDir::openLog: Failed to open swap log.");
+    }
+
+    debugs(50, 3, HERE << "Cache Dir #" << index << " log opened on FD " << swaplog_fd);
+
+    if (0 == NumberOfUFSDirs)
+        assert(NULL == UFSDirToGlobalDirMapping);
+
+    ++NumberOfUFSDirs;
+
+    assert(NumberOfUFSDirs <= Config.cacheSwap.n_configured);
+}
+
+void
+UFSSwapDir::closeLog()
+{
+    if (swaplog_fd < 0) /* not open */
+        return;
+
+    file_close(swaplog_fd);
+
+    debugs(47, 3, "Cache Dir #" << index << " log closed on FD " << swaplog_fd);
+
+    swaplog_fd = -1;
+
+    --NumberOfUFSDirs;
+
+    assert(NumberOfUFSDirs >= 0);
+
+    if (0 == NumberOfUFSDirs)
+        safe_free(UFSDirToGlobalDirMapping);
+}
+
+bool
+UFSSwapDir::validL1(int anInt) const
+{
+    return anInt < l1;
+}
+
+bool
+UFSSwapDir::validL2(int anInt) const
+{
+    return anInt < l2;
+}
+
+StoreEntry *
+UFSSwapDir::addDiskRestore(const cache_key * key,
+                           sfileno file_number,
+                           uint64_t swap_file_sz,
+                           time_t expires,
+                           time_t timestamp,
+                           time_t lastref,
+                           time_t lastmod,
+                           uint32_t refcount,
+                           uint16_t newFlags,
+                           int clean)
+{
+    StoreEntry *e = NULL;
+    debugs(47, 5, HERE << storeKeyText(key)  <<
+           ", fileno="<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << file_number);
+    /* if you call this you'd better be sure file_number is not
+     * already in use! */
+    e = new StoreEntry();
+    e->store_status = STORE_OK;
+    e->setMemStatus(NOT_IN_MEMORY);
+    e->swap_status = SWAPOUT_DONE;
+    e->swap_filen = file_number;
+    e->swap_dirn = index;
+    e->swap_file_sz = swap_file_sz;
+    e->lock_count = 0;
+    e->lastref = lastref;
+    e->timestamp = timestamp;
+    e->expires = expires;
+    e->lastmod = lastmod;
+    e->refcount = refcount;
+    e->flags = newFlags;
+    EBIT_SET(e->flags, ENTRY_CACHABLE);
+    EBIT_CLR(e->flags, RELEASE_REQUEST);
+    EBIT_CLR(e->flags, KEY_PRIVATE);
+    e->ping_status = PING_NONE;
+    EBIT_CLR(e->flags, ENTRY_VALIDATED);
+    mapBitSet(e->swap_filen);
+    cur_size += fs.blksize * sizeInBlocks(e->swap_file_sz);
+    ++n_disk_objects;
+    e->hashInsert(key); /* do it after we clear KEY_PRIVATE */
+    replacementAdd (e);
+    return e;
+}
+
+void
+UFSSwapDir::undoAddDiskRestore(StoreEntry *e)
+{
+    debugs(47, 5, HERE << *e);
+    replacementRemove(e); // checks swap_dirn so do it before we invalidate it
+    // Do not unlink the file as it might be used by a subsequent entry.
+    mapBitReset(e->swap_filen);
+    e->swap_filen = -1;
+    e->swap_dirn = -1;
+    cur_size -= fs.blksize * sizeInBlocks(e->swap_file_sz);
+    --n_disk_objects;
+}
+
+void
+UFSSwapDir::rebuild()
+{
+    ++StoreController::store_dirs_rebuilding;
+    eventAdd("storeRebuild", RebuildState::RebuildStep, new RebuildState(this), 0.0, 1);
+}
+
+void
+UFSSwapDir::closeTmpSwapLog()
+{
+    char *swaplog_path = xstrdup(logFile(NULL));
+    char *new_path = xstrdup(logFile(".new"));
+    int fd;
+    file_close(swaplog_fd);
+
+    if (xrename(new_path, swaplog_path) < 0) {
+        debugs(50, DBG_IMPORTANT, HERE << "ERROR: " << swaplog_path << ": " << xstrerror());
+        fatalf("Failed to rename log file %s to %s.new", swaplog_path, swaplog_path);
+    }
+
+    fd = file_open(swaplog_path, O_WRONLY | O_CREAT | O_BINARY);
+
+    if (fd < 0) {
+        debugs(50, DBG_IMPORTANT, HERE << "ERROR: " << swaplog_path << ": " << xstrerror());
+        fatalf("Failed to open swap log %s", swaplog_path);
+    }
+
+    safe_free(swaplog_path);
+    safe_free(new_path);
+    swaplog_fd = fd;
+    debugs(47, 3, HERE << "Cache Dir #" << index << " log opened on FD " << fd);
+}
+
+FILE *
+UFSSwapDir::openTmpSwapLog(int *clean_flag, int *zero_flag)
+{
+    char *swaplog_path = xstrdup(logFile(NULL));
+    char *clean_path = xstrdup(logFile(".last-clean"));
+    char *new_path = xstrdup(logFile(".new"));
+
+    struct stat log_sb;
+
+    struct stat clean_sb;
+    FILE *fp;
+    int fd;
+
+    if (::stat(swaplog_path, &log_sb) < 0) {
+        debugs(47, DBG_IMPORTANT, HERE << "Cache Dir #" << index << ": No log file");
+        safe_free(swaplog_path);
+        safe_free(clean_path);
+        safe_free(new_path);
+        return NULL;
+    }
+
+    *zero_flag = log_sb.st_size == 0 ? 1 : 0;
+    /* close the existing write-only FD */
+
+    if (swaplog_fd >= 0)
+        file_close(swaplog_fd);
+
+    /* open a write-only FD for the new log */
+    fd = file_open(new_path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
+
+    if (fd < 0) {
+        debugs(50, DBG_IMPORTANT, "ERROR: while opening swap log" << new_path << ": " << xstrerror());
+        fatal("UFSSwapDir::openTmpSwapLog: Failed to open swap log.");
+    }
+
+    swaplog_fd = fd;
+
+    {
+        const StoreSwapLogHeader header;
+        MemBuf buf;
+        buf.init(header.record_size, header.record_size);
+        buf.append(reinterpret_cast<const char*>(&header), sizeof(header));
+        // Pad to keep in sync with UFSSwapDir::writeCleanStart().
+        memset(buf.space(), 0, header.gapSize());
+        buf.appended(header.gapSize());
+        file_write(swaplog_fd, -1, buf.content(), buf.contentSize(),
+                   NULL, NULL, buf.freeFunc());
+    }
+
+    /* open a read-only stream of the old log */
+    fp = fopen(swaplog_path, "rb");
+
+    if (fp == NULL) {
+        debugs(50, DBG_CRITICAL, "ERROR: while opening " << swaplog_path << ": " << xstrerror());
+        fatal("Failed to open swap log for reading");
+    }
+
+    memset(&clean_sb, '\0', sizeof(struct stat));
+
+    if (::stat(clean_path, &clean_sb) < 0)
+        *clean_flag = 0;
+    else if (clean_sb.st_mtime < log_sb.st_mtime)
+        *clean_flag = 0;
+    else
+        *clean_flag = 1;
+
+    safeunlink(clean_path, 1);
+
+    safe_free(swaplog_path);
+
+    safe_free(clean_path);
+
+    safe_free(new_path);
+
+    return fp;
+}
+
+/*
+ * Begin the process to write clean cache state.  For AUFS this means
+ * opening some log files and allocating write buffers.  Return 0 if
+ * we succeed, and assign the 'func' and 'data' return pointers.
+ */
+int
+UFSSwapDir::writeCleanStart()
+{
+    UFSCleanLog *state = new UFSCleanLog(this);
+    StoreSwapLogHeader header;
+#if HAVE_FCHMOD
+
+    struct stat sb;
+#endif
+
+    cleanLog = NULL;
+    state->newLog = xstrdup(logFile(".clean"));
+    state->fd = file_open(state->newLog, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
+
+    if (state->fd < 0) {
+        xfree(state->newLog);
+        delete state;
+        return -1;
+    }
+
+    state->cur = xstrdup(logFile(NULL));
+    state->cln = xstrdup(logFile(".last-clean"));
+    state->outbuf = (char *)xcalloc(CLEAN_BUF_SZ, 1);
+    state->outbuf_offset = 0;
+    /*copy the header */
+    memcpy(state->outbuf, &header, sizeof(StoreSwapLogHeader));
+    // Leave a gap to keep in sync with UFSSwapDir::openTmpSwapLog().
+    memset(state->outbuf + sizeof(StoreSwapLogHeader), 0, header.gapSize());
+    state->outbuf_offset += header.record_size;
+
+    state->walker = repl->WalkInit(repl);
+    ::unlink(state->cln);
+    debugs(47, 3, HERE << "opened " << state->newLog << ", FD " << state->fd);
+#if HAVE_FCHMOD
+
+    if (::stat(state->cur, &sb) == 0)
+        fchmod(state->fd, sb.st_mode);
+
+#endif
+
+
+    cleanLog = state;
+    return 0;
+}
+
+void
+UFSSwapDir::writeCleanDone()
+{
+    UFSCleanLog *state = (UFSCleanLog *)cleanLog;
+    int fd;
+
+    if (NULL == state)
+        return;
+
+    if (state->fd < 0)
+        return;
+
+    state->walker->Done(state->walker);
+
+    if (FD_WRITE_METHOD(state->fd, state->outbuf, state->outbuf_offset) < 0) {
+        debugs(50, DBG_CRITICAL, HERE << state->newLog << ": write: " << xstrerror());
+        debugs(50, DBG_CRITICAL, HERE << "Current swap logfile not replaced.");
+        file_close(state->fd);
+        state->fd = -1;
+        ::unlink(state->newLog);
+    }
+
+    safe_free(state->outbuf);
+    /*
+     * You can't rename open files on Microsoft "operating systems"
+     * so we have to close before renaming.
+     */
+    closeLog();
+    /* save the fd value for a later test */
+    fd = state->fd;
+    /* rename */
+
+    if (state->fd >= 0) {
+#if _SQUID_OS2_ || _SQUID_WINDOWS_
+        file_close(state->fd);
+        state->fd = -1;
+#endif
+
+        xrename(state->newLog, state->cur);
+    }
+
+    /* touch a timestamp file if we're not still validating */
+    if (StoreController::store_dirs_rebuilding)
+        (void) 0;
+    else if (fd < 0)
+        (void) 0;
+    else
+        file_close(file_open(state->cln, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY));
+
+    /* close */
+    safe_free(state->cur);
+
+    safe_free(state->newLog);
+
+    safe_free(state->cln);
+
+    if (state->fd >= 0)
+        file_close(state->fd);
+
+    state->fd = -1;
+
+    delete state;
+
+    cleanLog = NULL;
+}
+
+void
+UFSSwapDir::CleanEvent(void *unused)
+{
+    static int swap_index = 0;
+    int i;
+    int j = 0;
+    int n = 0;
+    /*
+     * Assert that there are UFS cache_dirs configured, otherwise
+     * we should never be called.
+     */
+    assert(NumberOfUFSDirs);
+
+    if (NULL == UFSDirToGlobalDirMapping) {
+        SwapDir *sd;
+        /*
+         * Initialize the little array that translates UFS cache_dir
+         * number into the Config.cacheSwap.swapDirs array index.
+         */
+        UFSDirToGlobalDirMapping = (int *)xcalloc(NumberOfUFSDirs, sizeof(*UFSDirToGlobalDirMapping));
+
+        for (i = 0, n = 0; i < Config.cacheSwap.n_configured; ++i) {
+            /* This is bogus, the controller should just clean each instance once */
+            sd = dynamic_cast <SwapDir *>(INDEXSD(i));
+
+            if (!UFSSwapDir::IsUFSDir(sd))
+                continue;
+
+            UFSSwapDir *usd = dynamic_cast<UFSSwapDir *>(sd);
+
+            assert (usd);
+
+            UFSDirToGlobalDirMapping[n] = i;
+            ++n;
+
+            j += (usd->l1 * usd->l2);
+        }
+
+        assert(n == NumberOfUFSDirs);
+        /*
+         * Start the commonUfsDirClean() swap_index with a random
+         * value.  j equals the total number of UFS level 2
+         * swap directories
+         */
+        swap_index = (int) (squid_random() % j);
+    }
+
+    /* if the rebuild is finished, start cleaning directories. */
+    if (0 == StoreController::store_dirs_rebuilding) {
+        n = DirClean(swap_index);
+        ++swap_index;
+    }
+
+    eventAdd("storeDirClean", CleanEvent, NULL,
+             15.0 * exp(-0.25 * n), 1);
+}
+
+bool
+UFSSwapDir::IsUFSDir(SwapDir * sd)
+{
+    UFSSwapDir *mySD = dynamic_cast<UFSSwapDir *>(sd);
+    return (mySD != 0) ;
+}
+
+/*
+ * XXX: this is broken - it assumes all cache dirs use the same
+ * l1 and l2 scheme. -RBC 20021215. Partial fix is in place -
+ * if not UFSSwapDir return 0;
+ */
+bool
+UFSSwapDir::FilenoBelongsHere(int fn, int F0, int F1, int F2)
+{
+    int D1, D2;
+    int L1, L2;
+    int filn = fn;
+    assert(F0 < Config.cacheSwap.n_configured);
+    assert (UFSSwapDir::IsUFSDir (dynamic_cast<SwapDir *>(INDEXSD(F0))));
+    UFSSwapDir *sd = dynamic_cast<UFSSwapDir *>(INDEXSD(F0));
+
+    if (!sd)
+        return 0;
+
+    L1 = sd->l1;
+
+    L2 = sd->l2;
+
+    D1 = ((filn / L2) / L2) % L1;
+
+    if (F1 != D1)
+        return 0;
+
+    D2 = (filn / L2) % L2;
+
+    if (F2 != D2)
+        return 0;
+
+    return 1;
+}
+
+int
+UFSSwapDir::validFileno(sfileno filn, int flag) const
+{
+    if (filn < 0)
+        return 0;
+
+    /*
+     * If flag is set it means out-of-range file number should
+     * be considered invalid.
+     */
+    if (flag)
+        if (filn > map->capacity())
+            return 0;
+
+    return 1;
+}
+
+void
+UFSSwapDir::unlinkFile(sfileno f)
+{
+    debugs(79, 3, HERE << "unlinking fileno " <<  std::setfill('0') <<
+           std::hex << std::uppercase << std::setw(8) << f << " '" <<
+           fullPath(f,NULL) << "'");
+    /* commonUfsDirMapBitReset(this, f); */
+    IO->unlinkFile(fullPath(f,NULL));
+}
+
+bool
+UFSSwapDir::unlinkdUseful() const
+{
+    // unlinkd may be useful only in workers
+    return IamWorkerProcess() && IO->io->unlinkdUseful();
+}
+
+void
+UFSSwapDir::unlink(StoreEntry & e)
+{
+    debugs(79, 3, HERE << "dirno " << index  << ", fileno "<<
+           std::setfill('0') << std::hex << std::uppercase << std::setw(8) << e.swap_filen);
+    if (e.swap_status == SWAPOUT_DONE) {
+        cur_size -= fs.blksize * sizeInBlocks(e.swap_file_sz);
+        --n_disk_objects;
+    }
+    replacementRemove(&e);
+    mapBitReset(e.swap_filen);
+    UFSSwapDir::unlinkFile(e.swap_filen);
+}
+
+void
+UFSSwapDir::replacementAdd(StoreEntry * e)
+{
+    debugs(47, 4, HERE << "added node " << e << " to dir " << index);
+    repl->Add(repl, e, &e->repl);
+}
+
+
+void
+UFSSwapDir::replacementRemove(StoreEntry * e)
+{
+    StorePointer SD;
+
+    if (e->swap_dirn < 0)
+        return;
+
+    SD = INDEXSD(e->swap_dirn);
+
+    assert (dynamic_cast<UFSSwapDir *>(SD.getRaw()) == this);
+
+    debugs(47, 4, HERE << "remove node " << e << " from dir " << index);
+
+    repl->Remove(repl, e, &e->repl);
+}
+
+void
+UFSSwapDir::dump(StoreEntry & entry) const
+{
+    storeAppendPrintf(&entry, " %" PRIu64 " %d %d", maxSize() >> 20, l1, l2);
+    dumpOptions(&entry);
+}
+
+char *
+UFSSwapDir::fullPath(sfileno filn, char *fullpath) const
+{
+    LOCAL_ARRAY(char, fullfilename, MAXPATHLEN);
+    int L1 = l1;
+    int L2 = l2;
+
+    if (!fullpath)
+        fullpath = fullfilename;
+
+    fullpath[0] = '\0';
+
+    snprintf(fullpath, MAXPATHLEN, "%s/%02X/%02X/%08X",
+             path,
+             ((filn / L2) / L2) % L1,
+             (filn / L2) % L2,
+             filn);
+
+    return fullpath;
+}
+
+int
+UFSSwapDir::callback()
+{
+    return IO->callback();
+}
+
+void
+UFSSwapDir::sync()
+{
+    IO->sync();
+}
+
+void
+UFSSwapDir::swappedOut(const StoreEntry &e)
+{
+    cur_size += fs.blksize * sizeInBlocks(e.swap_file_sz);
+    ++n_disk_objects;
+}
+
+StoreSearch *
+UFSSwapDir::search(String const url, HttpRequest *request)
+{
+    if (url.size())
+        fatal ("Cannot search by url yet\n");
+
+    return new StoreSearchUFS (this);
+}
+
+void
+UFSSwapDir::logEntry(const StoreEntry & e, int op) const
+{
+    StoreSwapLogData *s = new StoreSwapLogData;
+    s->op = (char) op;
+    s->swap_filen = e.swap_filen;
+    s->timestamp = e.timestamp;
+    s->lastref = e.lastref;
+    s->expires = e.expires;
+    s->lastmod = e.lastmod;
+    s->swap_file_sz = e.swap_file_sz;
+    s->refcount = e.refcount;
+    s->flags = e.flags;
+    memcpy(s->key, e.key, SQUID_MD5_DIGEST_LENGTH);
+    s->finalize();
+    file_write(swaplog_fd,
+               -1,
+               s,
+               sizeof(StoreSwapLogData),
+               NULL,
+               NULL,
+               FreeObject);
+}
+
+int
+UFSSwapDir::DirClean(int swap_index)
+{
+    DIR *dir_pointer = NULL;
+
+    LOCAL_ARRAY(char, p1, MAXPATHLEN + 1);
+    LOCAL_ARRAY(char, p2, MAXPATHLEN + 1);
+
+    int files[20];
+    int swapfileno;
+    int fn;         /* same as swapfileno, but with dirn bits set */
+    int n = 0;
+    int k = 0;
+    int N0, N1, N2;
+    int D0, D1, D2;
+    UFSSwapDir *SD;
+    N0 = NumberOfUFSDirs;
+    D0 = UFSDirToGlobalDirMapping[swap_index % N0];
+    SD = dynamic_cast<UFSSwapDir *>(INDEXSD(D0));
+    assert (SD);
+    N1 = SD->l1;
+    D1 = (swap_index / N0) % N1;
+    N2 = SD->l2;
+    D2 = ((swap_index / N0) / N1) % N2;
+    snprintf(p1, MAXPATHLEN, "%s/%02X/%02X",
+             SD->path, D1, D2);
+    debugs(36, 3, HERE << "Cleaning directory " << p1);
+    dir_pointer = opendir(p1);
+
+    if (dir_pointer == NULL) {
+        if (errno == ENOENT) {
+            debugs(36, DBG_CRITICAL, HERE << "WARNING: Creating " << p1);
+#if _SQUID_MSWIN_
+
+            if (mkdir(p1) == 0)
+#else
+
+            if (mkdir(p1, 0777) == 0)
+#endif
+
+                return 0;
+        }
+
+        debugs(50, DBG_CRITICAL, HERE << p1 << ": " << xstrerror());
+        safeunlink(p1, 1);
+        return 0;
+    }
+
+    dirent_t *de;
+    while ((de = readdir(dir_pointer)) != NULL && k < 20) {
+        if (sscanf(de->d_name, "%X", &swapfileno) != 1)
+            continue;
+
+        fn = swapfileno;    /* XXX should remove this cruft ! */
+
+        if (SD->validFileno(fn, 1))
+            if (SD->mapBitTest(fn))
+                if (UFSSwapDir::FilenoBelongsHere(fn, D0, D1, D2))
+                    continue;
+
+        files[k] = swapfileno;
+        ++k;
+    }
+
+    closedir(dir_pointer);
+
+    if (k == 0)
+        return 0;
+
+    qsort(files, k, sizeof(int), rev_int_sort);
+
+    if (k > 10)
+        k = 10;
+
+    for (n = 0; n < k; ++n) {
+        debugs(36, 3, HERE << "Cleaning file "<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << files[n]);
+        snprintf(p2, MAXPATHLEN + 1, "%s/%08X", p1, files[n]);
+        safeunlink(p2, 0);
+        ++statCounter.swap.files_cleaned;
+    }
+
+    debugs(36, 3, HERE << "Cleaned " << k << " unused files from " << p1);
+    return k;
+}

=== added file 'src/fs/ufs/UFSSwapDir.h'
--- src/fs/ufs/UFSSwapDir.h	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/UFSSwapDir.h	2012-08-03 15:41:59 +0000
@@ -0,0 +1,185 @@
+/*
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ */
+
+#ifndef SQUID_FS_UFS_UFSSWAPDIR_H
+#define SQUID_FS_UFS_UFSSWAPDIR_H
+
+#include "SquidString.h"
+#include "Store.h"
+#include "StoreIOState.h"
+#include "StoreSearch.h"
+#include "SwapDir.h"
+#include "swap_log_op.h"
+#include "UFSStrategy.h"
+
+class HttpRequest;
+class ConfigOptionVector;
+class FileMap;
+class DiskIOModule;
+
+/// \ingroup UFS
+class UFSSwapDir : public SwapDir
+{
+public:
+    static bool IsUFSDir(SwapDir* sd);
+    static int DirClean(int swap_index);
+    /** check whether swapfile belongs to the specified cachedir/l1dir/l2dir
+     *
+     * \param cachedir the number of the cachedir which is being tested
+     * \param level1dir level-1 dir in the cachedir
+     * \param level2dir level-2 dir
+     */
+    static bool FilenoBelongsHere(int fn, int cachedir, int level1dir, int level2dir);
+
+    UFSSwapDir(char const *aType, const char *aModuleType);
+    /** Initial setup / end destruction */
+    virtual void init();
+    /** Create a new SwapDir (-z command-line option) */
+    virtual void create();
+    virtual void dump(StoreEntry &) const;
+    ~UFSSwapDir();
+    virtual StoreSearch *search(String const url, HttpRequest *);
+    /** double-check swap during rebuild (-S command-line option)
+     *
+     * called by storeCleanup if needed
+     */
+    virtual bool doubleCheck(StoreEntry &);
+    virtual bool unlinkdUseful() const;
+    /** unlink a file, and remove its entry from the filemap */
+    virtual void unlink(StoreEntry &);
+    virtual void statfs(StoreEntry &)const;
+    virtual void maintain();
+    /** check whether this filesystem can store the given object
+     *
+     * UFS filesystems will happily store anything as long as
+     * the LRU time isn't too small
+     */
+    virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const;
+    /** reference an object
+     *
+     * This routine is called whenever an object is referenced, so we can
+     * maintain replacement information within the storage fs.
+     */
+    virtual void reference(StoreEntry &);
+    /** de-reference an object
+     *
+     * This routine is called whenever the last reference to an object is
+     * removed, to maintain replacement information within the storage fs.
+     */
+    virtual bool dereference(StoreEntry &);
+    virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
+    virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
+    virtual void openLog();
+    virtual void closeLog();
+    virtual int writeCleanStart();
+    virtual void writeCleanDone();
+    virtual void logEntry(const StoreEntry & e, int op) const;
+    virtual void parse(int index, char *path); ///parse configuration and setup new SwapDir
+    virtual void reconfigure(); ///reconfigure the SwapDir
+    virtual int callback();
+    virtual void sync();
+    virtual void swappedOut(const StoreEntry &e);
+    virtual uint64_t currentSize() const { return cur_size; }
+    virtual uint64_t currentCount() const { return n_disk_objects; }
+
+    void unlinkFile(sfileno f);
+    // move down when unlink is a virtual method
+    //protected:
+    UFSStrategy *IO;
+    char *fullPath(sfileno, char *) const;
+    /* temp */
+    void closeTmpSwapLog();
+    FILE *openTmpSwapLog(int *clean_flag, int *zero_flag);
+    char *swapSubDir(int subdirn) const;
+    int mapBitTest(sfileno filn);
+    void mapBitReset(sfileno filn);
+    void mapBitSet(sfileno filn);
+    /** Add a new object to the cache with empty memory copy and pointer to disk
+     *
+     * This method is used to rebuild a store from disk
+     */
+    StoreEntry *addDiskRestore(const cache_key * key,
+                               sfileno file_number,
+                               uint64_t swap_file_sz,
+                               time_t expires,
+                               time_t timestamp,
+                               time_t lastref,
+                               time_t lastmod,
+                               uint32_t refcount,
+                               uint16_t flags,
+                               int clean);
+    /// Undo the effects of UFSSwapDir::addDiskRestore().
+    void undoAddDiskRestore(StoreEntry *e);
+    int validFileno(sfileno filn, int flag) const;
+    int mapBitAllocate();
+    virtual ConfigOption *getOptionTree() const;
+
+    void *fsdata;
+
+    bool validL2(int) const;
+    bool validL1(int) const;
+
+    /** Add and remove the given StoreEntry from the replacement policy in use */
+    void replacementAdd(StoreEntry *e);
+    void replacementRemove(StoreEntry *e);
+
+protected:
+    FileMap *map;
+    int suggest;
+    int l1;
+    int l2;
+
+private:
+    void parseSizeL1L2();
+    static int NumberOfUFSDirs;
+    static int * UFSDirToGlobalDirMapping;
+    bool pathIsDirectory(const char *path)const;
+    int swaplog_fd;
+    static EVH CleanEvent;
+    /** Verify that the the CacheDir exists
+     *
+     * If this returns < 0, then Squid exits, complains about swap
+     * directories not existing, and instructs the admin to run 'squid -z'
+     * Called by UFSSwapDir::init
+     */
+    bool verifyCacheDirs();
+    void rebuild();
+    int createDirectory(const char *path, int);
+    void createSwapSubDirs();
+    void dumpEntry(StoreEntry &) const;
+    char *logFile(char const *ext = NULL)const;
+    void changeIO(DiskIOModule *);
+    bool optionIOParse(char const *option, const char *value, int reconfiguring);
+    void optionIODump(StoreEntry * e) const;
+    mutable ConfigOptionVector *currentIOOptions;
+    char const *ioType;
+    uint64_t cur_size; ///< currently used space in the storage area
+    uint64_t n_disk_objects; ///< total number of objects stored
+};
+
+#endif /* SQUID_FS_UFS_UFSSWAPDIR_H */

=== added file 'src/fs/ufs/UFSSwapLogParser.cc'
--- src/fs/ufs/UFSSwapLogParser.cc	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/UFSSwapLogParser.cc	2012-08-02 21:40:53 +0000
@@ -0,0 +1,199 @@
+/*
+ * UFSSwapLogParser.cc
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ * 
+ */
+
+#include "squid.h"
+#include "md5.h"
+#include "StoreSwapLogData.h"
+#include "swap_log_op.h"
+#include "UFSSwapLogParser.h"
+
+/// Parse a swap header entry created on a system with 32-bit size_t and sfileno
+/// this is typical of 32-bit systems without large file support
+/// NP: SQUID_MD5_DIGEST_LENGTH is very risky still.
+class UFSSwapLogParser_v1_32bs:public UFSSwapLogParser
+{
+public:
+    /// version 1 cache swap.state entry with 32-bit size_t (swap_file_sz)
+    /// time_t an sfileno have no variation from the v1 baseline format
+    struct StoreSwapLogDataOld {
+        char op;
+        sfileno swap_filen;
+        time_t timestamp;
+        time_t lastref;
+        time_t expires;
+        time_t lastmod;
+        uint32_t swap_file_sz;
+        uint16_t refcount;
+        uint16_t flags;
+        unsigned char key[SQUID_MD5_DIGEST_LENGTH];
+    };
+    UFSSwapLogParser_v1_32bs(FILE *fp):UFSSwapLogParser(fp) {
+        record_size = sizeof(UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld);
+    }
+    /// Convert the on-disk 32-bit format to our current format while reading
+    bool ReadRecord(StoreSwapLogData &swapData) {
+        UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld readData;
+        int bytes = sizeof(UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld);
+
+        assert(log);
+
+        if (fread(&readData, bytes, 1, log) != 1) {
+            return false;
+        }
+        swapData.op = readData.op;
+        swapData.swap_filen = readData.swap_filen;
+        swapData.timestamp = readData.timestamp;
+        swapData.lastref = readData.lastref;
+        swapData.expires = readData.expires;
+        swapData.lastmod = readData.lastmod;
+        swapData.swap_file_sz = readData.swap_file_sz;
+        swapData.refcount = readData.refcount;
+        swapData.flags = readData.flags;
+        memcpy(swapData.key, readData.key, SQUID_MD5_DIGEST_LENGTH);
+        return true;
+    }
+};
+
+/// swap.state v2 log parser
+class UFSSwapLogParser_v2: public UFSSwapLogParser
+{
+public:
+    UFSSwapLogParser_v2(FILE *fp): UFSSwapLogParser(fp) {
+        record_size = sizeof(StoreSwapLogData);
+    }
+    bool ReadRecord(StoreSwapLogData &swapData) {
+        assert(log);
+        return fread(&swapData, sizeof(StoreSwapLogData), 1, log) == 1;
+    }
+};
+
+UFSSwapLogParser *UFSSwapLogParser::GetUFSSwapLogParser(FILE *fp)
+{
+    StoreSwapLogHeader header;
+
+    assert(fp);
+
+    if (fread(&header, sizeof(StoreSwapLogHeader), 1, fp) != 1)
+        return NULL;
+
+    if (header.op != SWAP_LOG_VERSION) {
+        debugs(47, DBG_IMPORTANT, "Old swap file detected...");
+        fseek(fp, 0, SEEK_SET);
+        return new UFSSwapLogParser_v1_32bs(fp); // Um. 32-bits except time_t, and can't determine that.
+    }
+
+    debugs(47, 2, "Swap file version: " << header.version);
+
+    if (header.version == 1) {
+        if (fseek(fp, header.record_size, SEEK_SET) != 0)
+            return NULL;
+
+        debugs(47, DBG_IMPORTANT, "Rejecting swap file v1 to avoid cache " <<
+               "index corruption. Forcing a full cache index rebuild. " <<
+               "See Squid bug #3441.");
+        return NULL;
+
+#if UNUSED_CODE
+        // baseline
+        // 32-bit sfileno
+        // native time_t (hopefully 64-bit)
+        // 64-bit file size
+        if (header.record_size == sizeof(StoreSwapLogData)) {
+            debugs(47, DBG_IMPORTANT, "Version 1 of swap file with LFS support detected... ");
+            return new UFSSwapLogParser_v1(fp);
+        }
+
+        // which means we have a 3-way grid of permutations to import (yuck!)
+        // 1) sfileno 32-bit / 64-bit  (64-bit was broken)
+        // 2) time_t 32-bit / 64-bit
+        // 3) size_t 32-bit / 64-bit  (32-bit was pre-LFS)
+
+        // 32-bit systems...
+        // only LFS (size_t) differs from baseline
+        if (header.record_size == sizeof(struct UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld)) {
+            debugs(47, DBG_IMPORTANT, "Version 1 (32-bit) swap file without LFS support detected... ");
+            return new UFSSwapLogParser_v1_32bs(fp);
+        }
+        // LFS (size_t) and timestamps (time_t) differs from baseline
+        if (header.record_size == sizeof(struct UFSSwapLogParser_v1_32bst::StoreSwapLogDataOld)) {
+            debugs(47, DBG_IMPORTANT, "Version 1 (32-bit) swap file with short timestamps and without LFS support detected... ");
+            return new UFSSwapLogParser_v1_32bst(fp);
+        }
+        // No downgrade for 64-bit timestamps to 32-bit.
+
+        // 64-bit systems
+        // sfileno was 64-bit for a some builds
+        if (header.record_size == sizeof(struct UFSSwapLogParser_v1_64bfn::StoreSwapLogDataOld)) {
+            debugs(47, DBG_IMPORTANT, "Version 1 (64-bit) swap file with broken sfileno detected... ");
+            return new UFSSwapLogParser_v1_64bfn(fp);
+        }
+        // NP: 64-bit system with 32-bit size_t/time_t are not handled.
+
+        debugs(47, DBG_IMPORTANT, "WARNING: The swap file has wrong format!... ");
+        debugs(47, DBG_IMPORTANT, "NOTE: Cannot safely downgrade caches to short (32-bit) timestamps.");
+        return NULL;
+#endif
+    }
+
+    if (header.version >= 2) {
+        if (!header.sane()) {
+            debugs(47, DBG_IMPORTANT, "ERROR: Corrupted v" << header.version <<
+                   " swap file header.");
+            return NULL;
+        }
+
+        if (fseek(fp, header.record_size, SEEK_SET) != 0)
+            return NULL;
+
+        if (header.version == 2)
+            return new UFSSwapLogParser_v2(fp);
+    }
+
+    // TODO: v3: write to disk in network-order bytes for the larger fields?
+
+    debugs(47, DBG_IMPORTANT, "Unknown swap file version: " << header.version);
+    return NULL;
+}
+
+int UFSSwapLogParser::SwapLogEntries()
+{
+    struct stat sb;
+
+    if (log_entries >= 0)
+        return log_entries;
+
+    if (log && record_size && 0 == fstat(fileno(log), &sb)) {
+        log_entries = sb.st_size/record_size;
+        return log_entries;
+    }
+
+    return 0;
+}

=== added file 'src/fs/ufs/UFSSwapLogParser.h'
--- src/fs/ufs/UFSSwapLogParser.h	1970-01-01 00:00:00 +0000
+++ src/fs/ufs/UFSSwapLogParser.h	2012-08-02 21:40:53 +0000
@@ -0,0 +1,63 @@
+/*
+ * UFSSwapLogParser.h
+ *
+ * SQUID Web Proxy Cache          http://www.squid-cache.org/
+ * ----------------------------------------------------------
+ *
+ *  Squid is the result of efforts by numerous individuals from
+ *  the Internet community; see the CONTRIBUTORS file for full
+ *  details.   Many organizations have provided support for Squid's
+ *  development; see the SPONSORS file for full details.  Squid is
+ *  Copyrighted (C) 2001 by the Regents of the University of
+ *  California; see the COPYRIGHT file for full details.  Squid
+ *  incorporates software developed and/or copyrighted by other
+ *  sources; see the CREDITS file for full details.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; either version 2 of the License, or
+ *  (at your option) any later version.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program; if not, write to the Free Software
+ *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
+ *
+ */
+
+#ifndef SQUID_FS_UFS_UFSSWAPLOGPARSER_H
+#define SQUID_FS_UFS_UFSSWAPLOGPARSER_H
+
+#include <stdio.h>
+
+class StoreSwapLogData;
+
+/// \ingroup UFS
+class UFSSwapLogParser
+{
+public:
+    FILE *log;
+    int log_entries;
+    int record_size;
+
+    UFSSwapLogParser(FILE *fp):log(fp),log_entries(-1), record_size(0) {
+    }
+    virtual ~UFSSwapLogParser() {};
+
+    static UFSSwapLogParser *GetUFSSwapLogParser(FILE *fp);
+
+    virtual bool ReadRecord(StoreSwapLogData &swapData) = 0;
+    int SwapLogEntries();
+    void Close() {
+        if (log) {
+            fclose(log);
+            log = NULL;
+        }
+    }
+};
+
+#endif /* SQUID_FS_UFS_UFSSWAPLOGPARSER_H */

=== removed file 'src/fs/ufs/store_dir_ufs.cc'
--- src/fs/ufs/store_dir_ufs.cc	2012-07-23 15:34:12 +0000
+++ src/fs/ufs/store_dir_ufs.cc	1970-01-01 00:00:00 +0000
@@ -1,1471 +0,0 @@
-
-/*
- * $Id$
- *
- * DEBUG: section 47    Store Directory Routines
- * AUTHOR: Duane Wessels
- *
- * SQUID Web Proxy Cache          http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- *  Squid is the result of efforts by numerous individuals from
- *  the Internet community; see the CONTRIBUTORS file for full
- *  details.   Many organizations have provided support for Squid's
- *  development; see the SPONSORS file for full details.  Squid is
- *  Copyrighted (C) 2001 by the Regents of the University of
- *  California; see the COPYRIGHT file for full details.  Squid
- *  incorporates software developed and/or copyrighted by other
- *  sources; see the CREDITS file for full details.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- */
-
-#include "squid-old.h"
-#include "Store.h"
-#include "fde.h"
-#include "ufscommon.h"
-#include "StoreSwapLogData.h"
-#include "ConfigOption.h"
-#include "DiskIO/DiskIOStrategy.h"
-#include "DiskIO/DiskIOModule.h"
-#include "FileMap.h"
-#include "Parsing.h"
-#include "SquidMath.h"
-#include "SquidTime.h"
-#include "StatCounters.h"
-#include "SwapDir.h"
-#include "swap_log_op.h"
-
-int UFSSwapDir::NumberOfUFSDirs = 0;
-int *UFSSwapDir::UFSDirToGlobalDirMapping = NULL;
-
-/*
- * storeUfsDirCheckObj
- *
- * This routine is called by storeDirSelectSwapDir to see if the given
- * object is able to be stored on this filesystem. UFS filesystems will
- * happily store anything as long as the LRU time isn't too small.
- */
-bool
-UFSSwapDir::canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const
-{
-    if (!SwapDir::canStore(e, diskSpaceNeeded, load))
-        return false;
-
-    if (IO->shedLoad())
-        return false;
-
-    load = IO->load();
-    return true;
-}
-
-
-/* ========== LOCAL FUNCTIONS ABOVE, GLOBAL FUNCTIONS BELOW ========== */
-
-void
-UFSSwapDir::parseSizeL1L2()
-{
-    int i = GetInteger();
-    if (i <= 0)
-        fatal("UFSSwapDir::parseSizeL1L2: invalid size value");
-
-    const uint64_t size = static_cast<uint64_t>(i) << 20; // MBytes to Bytes
-
-    /* just reconfigure it */
-    if (reconfiguring) {
-        if (size == maxSize())
-            debugs(3, 2, "Cache dir '" << path << "' size remains unchanged at " << i << " MB");
-        else
-            debugs(3, 1, "Cache dir '" << path << "' size changed to " << i << " MB");
-    }
-
-    max_size = size;
-
-    l1 = GetInteger();
-
-    if (l1 <= 0)
-        fatal("UFSSwapDir::parseSizeL1L2: invalid level 1 directories value");
-
-    l2 = GetInteger();
-
-    if (l2 <= 0)
-        fatal("UFSSwapDir::parseSizeL1L2: invalid level 2 directories value");
-}
-
-/*
- * storeUfsDirReconfigure
- *
- * This routine is called when the given swapdir needs reconfiguring
- */
-
-void
-UFSSwapDir::reconfigure()
-{
-    parseSizeL1L2();
-    parseOptions(1);
-}
-
-/*
- * storeUfsDirParse
- *
- * Called when a *new* fs is being setup.
- */
-void
-UFSSwapDir::parse (int anIndex, char *aPath)
-{
-    index = anIndex;
-    path = xstrdup(aPath);
-
-    parseSizeL1L2();
-
-    /* Initialise replacement policy stuff */
-    repl = createRemovalPolicy(Config.replPolicy);
-
-    parseOptions(0);
-}
-
-void
-UFSSwapDir::changeIO(DiskIOModule *module)
-{
-    DiskIOStrategy *anIO = module->createStrategy();
-    safe_free(ioType);
-    ioType = xstrdup(module->type());
-
-    delete IO->io;
-    IO->io = anIO;
-    /* Change the IO Options */
-
-    if (currentIOOptions && currentIOOptions->options.size() > 2)
-        delete currentIOOptions->options.pop_back();
-
-    /* TODO: factor out these 4 lines */
-    ConfigOption *ioOptions = IO->io->getOptionTree();
-
-    if (ioOptions)
-        currentIOOptions->options.push_back(ioOptions);
-}
-
-bool
-UFSSwapDir::optionIOParse(char const *option, const char *value, int isaReconfig)
-{
-    if (strcmp(option, "IOEngine") != 0)
-        return false;
-
-    if (isaReconfig)
-        /* silently ignore this */
-        return true;
-
-    if (!value)
-        self_destruct();
-
-    DiskIOModule *module = DiskIOModule::Find(value);
-
-    if (!module)
-        self_destruct();
-
-    changeIO(module);
-
-    return true;
-}
-
-void
-UFSSwapDir::optionIODump(StoreEntry * e) const
-{
-    storeAppendPrintf(e, " IOEngine=%s", ioType);
-}
-
-ConfigOption *
-UFSSwapDir::getOptionTree() const
-{
-    ConfigOption *parentResult = SwapDir::getOptionTree();
-
-    if (currentIOOptions == NULL)
-        currentIOOptions = new ConfigOptionVector();
-
-    currentIOOptions->options.push_back(parentResult);
-
-    currentIOOptions->options.push_back(new ConfigOptionAdapter<UFSSwapDir>(*const_cast<UFSSwapDir *>(this), &UFSSwapDir::optionIOParse, &UFSSwapDir::optionIODump));
-
-    if (ConfigOption *ioOptions = IO->io->getOptionTree())
-        currentIOOptions->options.push_back(ioOptions);
-
-    ConfigOption* result = currentIOOptions;
-
-    currentIOOptions = NULL;
-
-    return result;
-}
-
-/*
- * Initial setup / end destruction
- */
-void
-UFSSwapDir::init()
-{
-    debugs(47, 3, "Initialising UFS SwapDir engine.");
-    /* Parsing must be finished by now - force to NULL, don't delete */
-    currentIOOptions = NULL;
-    static int started_clean_event = 0;
-    static const char *errmsg =
-        "\tFailed to verify one of the swap directories, Check cache.log\n"
-        "\tfor details.  Run 'squid -z' to create swap directories\n"
-        "\tif needed, or if running Squid for the first time.";
-    IO->init();
-
-    if (verifyCacheDirs())
-        fatal(errmsg);
-
-    openLog();
-
-    rebuild();
-
-    if (!started_clean_event) {
-        eventAdd("UFS storeDirClean", CleanEvent, NULL, 15.0, 1);
-        started_clean_event = 1;
-    }
-
-    (void) storeDirGetBlkSize(path, &fs.blksize);
-}
-
-void
-UFSSwapDir::create()
-{
-    debugs(47, 3, "Creating swap space in " << path);
-    createDirectory(path, 0);
-    createSwapSubDirs();
-}
-
-UFSSwapDir::UFSSwapDir(char const *aType, const char *anIOType) : SwapDir(aType), IO(NULL), map(new FileMap()), suggest(0), swaplog_fd (-1), currentIOOptions(new ConfigOptionVector()), ioType(xstrdup(anIOType)), cur_size(0), n_disk_objects(0)
-{
-    /* modulename is only set to disk modules that are built, by configure,
-     * so the Find call should never return NULL here.
-     */
-    IO = new UFSStrategy(DiskIOModule::Find(anIOType)->createStrategy());
-}
-
-UFSSwapDir::~UFSSwapDir()
-{
-    if (swaplog_fd > -1) {
-        file_close(swaplog_fd);
-        swaplog_fd = -1;
-    }
-
-    delete map;
-
-    if (IO)
-        delete IO;
-
-    IO = NULL;
-
-    safe_free(ioType);
-}
-
-void
-UFSSwapDir::dumpEntry(StoreEntry &e) const
-{
-    debugs(47, 0, "UFSSwapDir::dumpEntry: FILENO "<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << e.swap_filen);
-    debugs(47, 0, "UFSSwapDir::dumpEntry: PATH " << fullPath(e.swap_filen, NULL)   );
-    e.dump(0);
-}
-
-/*
- * UFSSwapDir::doubleCheck
- *
- * This is called by storeCleanup() if -S was given on the command line.
- */
-bool
-UFSSwapDir::doubleCheck(StoreEntry & e)
-{
-
-    struct stat sb;
-
-    if (::stat(fullPath(e.swap_filen, NULL), &sb) < 0) {
-        debugs(47, 0, "UFSSwapDir::doubleCheck: MISSING SWAP FILE");
-        dumpEntry(e);
-        return true;
-    }
-
-    if ((off_t)e.swap_file_sz != sb.st_size) {
-        debugs(47, 0, "UFSSwapDir::doubleCheck: SIZE MISMATCH");
-        debugs(47, 0, "UFSSwapDir::doubleCheck: ENTRY SIZE: " << e.swap_file_sz << ", FILE SIZE: " << sb.st_size);
-        dumpEntry(e);
-        return true;
-    }
-
-    return false;
-}
-
-void
-UFSSwapDir::statfs(StoreEntry & sentry) const
-{
-    int totl_kb = 0;
-    int free_kb = 0;
-    int totl_in = 0;
-    int free_in = 0;
-    int x;
-    storeAppendPrintf(&sentry, "First level subdirectories: %d\n", l1);
-    storeAppendPrintf(&sentry, "Second level subdirectories: %d\n", l2);
-    storeAppendPrintf(&sentry, "Maximum Size: %" PRIu64 " KB\n", maxSize() >> 10);
-    storeAppendPrintf(&sentry, "Current Size: %.2f KB\n", currentSize() / 1024.0);
-    storeAppendPrintf(&sentry, "Percent Used: %0.2f%%\n",
-                      Math::doublePercent(currentSize(), maxSize()));
-    storeAppendPrintf(&sentry, "Filemap bits in use: %d of %d (%d%%)\n",
-                      map->numFilesInMap(), map->capacity(),
-                      Math::intPercent(map->numFilesInMap(), map->capacity()));
-    x = storeDirGetUFSStats(path, &totl_kb, &free_kb, &totl_in, &free_in);
-
-    if (0 == x) {
-        storeAppendPrintf(&sentry, "Filesystem Space in use: %d/%d KB (%d%%)\n",
-                          totl_kb - free_kb,
-                          totl_kb,
-                          Math::intPercent(totl_kb - free_kb, totl_kb));
-        storeAppendPrintf(&sentry, "Filesystem Inodes in use: %d/%d (%d%%)\n",
-                          totl_in - free_in,
-                          totl_in,
-                          Math::intPercent(totl_in - free_in, totl_in));
-    }
-
-    storeAppendPrintf(&sentry, "Flags:");
-
-    if (flags.selected)
-        storeAppendPrintf(&sentry, " SELECTED");
-
-    if (flags.read_only)
-        storeAppendPrintf(&sentry, " READ-ONLY");
-
-    storeAppendPrintf(&sentry, "\n");
-
-    IO->statfs(sentry);
-}
-
-void
-UFSSwapDir::maintain()
-{
-    /* We can't delete objects while rebuilding swap */
-
-    /* XXX FIXME each store should start maintaining as it comes online. */
-
-    if (StoreController::store_dirs_rebuilding)
-        return;
-
-    StoreEntry *e = NULL;
-
-    int removed = 0;
-
-    RemovalPurgeWalker *walker;
-
-    double f = (double) (currentSize() - minSize()) / (maxSize() - minSize());
-
-    f = f < 0.0 ? 0.0 : f > 1.0 ? 1.0 : f;
-
-    int max_scan = (int) (f * 400.0 + 100.0);
-
-    int max_remove = (int) (f * 70.0 + 10.0);
-
-    /*
-     * This is kinda cheap, but so we need this priority hack?
-     */
-
-    debugs(47, 3, "storeMaintainSwapSpace: f=" << f << ", max_scan=" << max_scan << ", max_remove=" << max_remove  );
-
-    walker = repl->PurgeInit(repl, max_scan);
-
-    while (1) {
-        if (currentSize() < minSize())
-            break;
-
-        if (removed >= max_remove)
-            break;
-
-        e = walker->Next(walker);
-
-        if (!e)
-            break;		/* no more objects */
-
-        ++removed;
-
-        e->release();
-    }
-
-    walker->Done(walker);
-    debugs(47, (removed ? 2 : 3), "UFSSwapDir::maintain: " << path <<
-           " removed " << removed << "/" << max_remove << " f=" <<
-           std::setprecision(4) << f << " max_scan=" << max_scan);
-}
-
-/*
- * UFSSwapDir::reference
- *
- * This routine is called whenever an object is referenced, so we can
- * maintain replacement information within the storage fs.
- */
-void
-UFSSwapDir::reference(StoreEntry &e)
-{
-    debugs(47, 3, "UFSSwapDir::reference: referencing " << &e << " " << e.swap_dirn << "/" << e.swap_filen);
-
-    if (repl->Referenced)
-        repl->Referenced(repl, &e, &e.repl);
-}
-
-/*
- * UFSSwapDir::dereference
- * This routine is called whenever the last reference to an object is
- * removed, to maintain replacement information within the storage fs.
- */
-bool
-UFSSwapDir::dereference(StoreEntry & e)
-{
-    debugs(47, 3, "UFSSwapDir::dereference: referencing " << &e << " " << e.swap_dirn << "/" << e.swap_filen);
-
-    if (repl->Dereferenced)
-        repl->Dereferenced(repl, &e, &e.repl);
-
-    return true; // keep e in the global store_table
-}
-
-StoreIOState::Pointer
-UFSSwapDir::createStoreIO(StoreEntry &e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * aCallback, void *callback_data)
-{
-    return IO->create (this, &e, file_callback, aCallback, callback_data);
-}
-
-StoreIOState::Pointer
-UFSSwapDir::openStoreIO(StoreEntry &e, StoreIOState::STFNCB * file_callback, StoreIOState::STIOCB * aCallback, void *callback_data)
-{
-    return IO->open (this, &e, file_callback, aCallback, callback_data);
-}
-
-int
-UFSSwapDir::mapBitTest(sfileno filn)
-{
-    return map->testBit(filn);
-}
-
-void
-UFSSwapDir::mapBitSet(sfileno filn)
-{
-    map->setBit(filn);
-}
-
-void
-UFSSwapDir::mapBitReset(sfileno filn)
-{
-    /*
-     * We have to test the bit before calling clearBit as
-     * it doesn't do bounds checking and blindly assumes
-     * filn is a valid file number, but it might not be because
-     * the map is dynamic in size.  Also clearing an already clear
-     * bit puts the map counter of-of-whack.
-     */
-
-    if (map->testBit(filn))
-        map->clearBit(filn);
-}
-
-int
-UFSSwapDir::mapBitAllocate()
-{
-    int fn;
-    fn = map->allocate(suggest);
-    map->setBit(fn);
-    suggest = fn + 1;
-    return fn;
-}
-
-char *
-UFSSwapDir::swapSubDir(int subdirn)const
-{
-    LOCAL_ARRAY(char, fullfilename, MAXPATHLEN);
-    assert(0 <= subdirn && subdirn < l1);
-    snprintf(fullfilename, MAXPATHLEN, "%s/%02X", path, subdirn);
-    return fullfilename;
-}
-
-int
-UFSSwapDir::createDirectory(const char *aPath, int should_exist)
-{
-    int created = 0;
-
-    struct stat st;
-    getCurrentTime();
-
-    if (0 == ::stat(aPath, &st)) {
-        if (S_ISDIR(st.st_mode)) {
-            debugs(47, (should_exist ? 3 : 1), aPath << " exists");
-        } else {
-            fatalf("Swap directory %s is not a directory.", aPath);
-        }
-
-#if _SQUID_MSWIN_
-
-    } else if (0 == mkdir(aPath)) {
-#else
-
-    } else if (0 == mkdir(aPath, 0755)) {
-#endif
-        debugs(47, (should_exist ? 1 : 3), aPath << " created");
-        created = 1;
-    } else {
-        fatalf("Failed to make swap directory %s: %s",
-               aPath, xstrerror());
-    }
-
-    return created;
-}
-
-bool
-UFSSwapDir::pathIsDirectory(const char *aPath)const
-{
-
-    struct stat sb;
-
-    if (::stat(aPath, &sb) < 0) {
-        debugs(47, 0, "" << aPath << ": " << xstrerror());
-        return false;
-    }
-
-    if (S_ISDIR(sb.st_mode) == 0) {
-        debugs(47, 0, "" << aPath << " is not a directory");
-        return false;
-    }
-
-    return true;
-}
-
-/*
- * This function is called by commonUfsDirInit().  If this returns < 0,
- * then Squid exits, complains about swap directories not
- * existing, and instructs the admin to run 'squid -z'
- */
-bool
-UFSSwapDir::verifyCacheDirs()
-{
-    if (!pathIsDirectory(path))
-        return true;
-
-    for (int j = 0; j < l1; ++j) {
-        char const *aPath = swapSubDir(j);
-
-        if (!pathIsDirectory(aPath))
-            return true;
-    }
-
-    return false;
-}
-
-void
-UFSSwapDir::createSwapSubDirs()
-{
-    LOCAL_ARRAY(char, name, MAXPATHLEN);
-
-    for (int i = 0; i < l1; ++i) {
-        snprintf(name, MAXPATHLEN, "%s/%02X", path, i);
-
-        int should_exist;
-
-        if (createDirectory(name, 0))
-            should_exist = 0;
-        else
-            should_exist = 1;
-
-        debugs(47, 1, "Making directories in " << name);
-
-        for (int k = 0; k < l2; ++k) {
-            snprintf(name, MAXPATHLEN, "%s/%02X/%02X", path, i, k);
-            createDirectory(name, should_exist);
-        }
-    }
-}
-
-char *
-UFSSwapDir::logFile(char const *ext) const
-{
-    LOCAL_ARRAY(char, lpath, MAXPATHLEN);
-    LOCAL_ARRAY(char, pathtmp, MAXPATHLEN);
-    LOCAL_ARRAY(char, digit, 32);
-    char *pathtmp2;
-
-    if (Config.Log.swap) {
-        xstrncpy(pathtmp, path, MAXPATHLEN - 64);
-        pathtmp2 = pathtmp;
-
-        while ((pathtmp2 = strchr(pathtmp2, '/')) != NULL)
-            *pathtmp2 = '.';
-
-        while (strlen(pathtmp) && pathtmp[strlen(pathtmp) - 1] == '.')
-            pathtmp[strlen(pathtmp) - 1] = '\0';
-
-        for (pathtmp2 = pathtmp; *pathtmp2 == '.'; ++pathtmp2);
-        snprintf(lpath, MAXPATHLEN - 64, Config.Log.swap, pathtmp2);
-
-        if (strncmp(lpath, Config.Log.swap, MAXPATHLEN - 64) == 0) {
-            strcat(lpath, ".");
-            snprintf(digit, 32, "%02d", index);
-            strncat(lpath, digit, 3);
-        }
-    } else {
-        xstrncpy(lpath, path, MAXPATHLEN - 64);
-        strcat(lpath, "/swap.state");
-    }
-
-    if (ext)
-        strncat(lpath, ext, 16);
-
-    return lpath;
-}
-
-void
-UFSSwapDir::openLog()
-{
-    char *logPath;
-    logPath = logFile();
-    swaplog_fd = file_open(logPath, O_WRONLY | O_CREAT | O_BINARY);
-
-    if (swaplog_fd < 0) {
-        debugs(50, 1, "" << logPath << ": " << xstrerror());
-        fatal("commonUfsDirOpenSwapLog: Failed to open swap log.");
-    }
-
-    debugs(50, 3, "Cache Dir #" << index << " log opened on FD " << swaplog_fd);
-
-    if (0 == NumberOfUFSDirs)
-        assert(NULL == UFSDirToGlobalDirMapping);
-
-    ++NumberOfUFSDirs;
-
-    assert(NumberOfUFSDirs <= Config.cacheSwap.n_configured);
-}
-
-void
-UFSSwapDir::closeLog()
-{
-    if (swaplog_fd < 0)	/* not open */
-        return;
-
-    file_close(swaplog_fd);
-
-    debugs(47, 3, "Cache Dir #" << index << " log closed on FD " << swaplog_fd);
-
-    swaplog_fd = -1;
-
-    --NumberOfUFSDirs;
-
-    assert(NumberOfUFSDirs >= 0);
-
-    if (0 == NumberOfUFSDirs)
-        safe_free(UFSDirToGlobalDirMapping);
-}
-
-bool
-UFSSwapDir::validL1(int anInt) const
-{
-    return anInt < l1;
-}
-
-bool
-UFSSwapDir::validL2(int anInt) const
-{
-    return anInt < l2;
-}
-
-/* Add a new object to the cache with empty memory copy and pointer to disk
- * use to rebuild store from disk. */
-StoreEntry *
-UFSSwapDir::addDiskRestore(const cache_key * key,
-                           sfileno file_number,
-                           uint64_t swap_file_sz,
-                           time_t expires,
-                           time_t timestamp,
-                           time_t lastref,
-                           time_t lastmod,
-                           uint32_t refcount,
-                           uint16_t newFlags,
-                           int clean)
-{
-    StoreEntry *e = NULL;
-    debugs(47, 5, "commonUfsAddDiskRestore: " << storeKeyText(key)  <<
-           ", fileno="<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << file_number);
-    /* if you call this you'd better be sure file_number is not
-     * already in use! */
-    e = new StoreEntry();
-    e->store_status = STORE_OK;
-    e->setMemStatus(NOT_IN_MEMORY);
-    e->swap_status = SWAPOUT_DONE;
-    e->swap_filen = file_number;
-    e->swap_dirn = index;
-    e->swap_file_sz = swap_file_sz;
-    e->lock_count = 0;
-    e->lastref = lastref;
-    e->timestamp = timestamp;
-    e->expires = expires;
-    e->lastmod = lastmod;
-    e->refcount = refcount;
-    e->flags = newFlags;
-    EBIT_SET(e->flags, ENTRY_CACHABLE);
-    EBIT_CLR(e->flags, RELEASE_REQUEST);
-    EBIT_CLR(e->flags, KEY_PRIVATE);
-    e->ping_status = PING_NONE;
-    EBIT_CLR(e->flags, ENTRY_VALIDATED);
-    mapBitSet(e->swap_filen);
-    cur_size += fs.blksize * sizeInBlocks(e->swap_file_sz);
-    ++n_disk_objects;
-    e->hashInsert(key);	/* do it after we clear KEY_PRIVATE */
-    replacementAdd (e);
-    return e;
-}
-
-void
-UFSSwapDir::undoAddDiskRestore(StoreEntry *e)
-{
-    debugs(47, 5, HERE << *e);
-    replacementRemove(e); // checks swap_dirn so do it before we invalidate it
-    // Do not unlink the file as it might be used by a subsequent entry.
-    mapBitReset(e->swap_filen);
-    e->swap_filen = -1;
-    e->swap_dirn = -1;
-    cur_size -= fs.blksize * sizeInBlocks(e->swap_file_sz);
-    --n_disk_objects;
-}
-
-void
-UFSSwapDir::rebuild()
-{
-    ++StoreController::store_dirs_rebuilding;
-    eventAdd("storeRebuild", RebuildState::RebuildStep, new RebuildState(this), 0.0, 1);
-}
-
-void
-UFSSwapDir::closeTmpSwapLog()
-{
-    char *swaplog_path = xstrdup(logFile(NULL));
-    char *new_path = xstrdup(logFile(".new"));
-    int fd;
-    file_close(swaplog_fd);
-
-    if (xrename(new_path, swaplog_path) < 0) {
-        debugs(50, DBG_IMPORTANT, "ERROR: " << swaplog_path << ": " << xstrerror());
-        fatalf("Failed to rename log file %s to %s.new", swaplog_path, swaplog_path);
-    }
-
-    fd = file_open(swaplog_path, O_WRONLY | O_CREAT | O_BINARY);
-
-    if (fd < 0) {
-        debugs(50, DBG_IMPORTANT, "ERROR: " << swaplog_path << ": " << xstrerror());
-        fatalf("Failed to open swap log %s", swaplog_path);
-    }
-
-    safe_free(swaplog_path);
-    safe_free(new_path);
-    swaplog_fd = fd;
-    debugs(47, 3, "Cache Dir #" << index << " log opened on FD " << fd);
-}
-
-FILE *
-UFSSwapDir::openTmpSwapLog(int *clean_flag, int *zero_flag)
-{
-    char *swaplog_path = xstrdup(logFile(NULL));
-    char *clean_path = xstrdup(logFile(".last-clean"));
-    char *new_path = xstrdup(logFile(".new"));
-
-    struct stat log_sb;
-
-    struct stat clean_sb;
-    FILE *fp;
-    int fd;
-
-    if (::stat(swaplog_path, &log_sb) < 0) {
-        debugs(47, 1, "Cache Dir #" << index << ": No log file");
-        safe_free(swaplog_path);
-        safe_free(clean_path);
-        safe_free(new_path);
-        return NULL;
-    }
-
-    *zero_flag = log_sb.st_size == 0 ? 1 : 0;
-    /* close the existing write-only FD */
-
-    if (swaplog_fd >= 0)
-        file_close(swaplog_fd);
-
-    /* open a write-only FD for the new log */
-    fd = file_open(new_path, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
-
-    if (fd < 0) {
-        debugs(50, 1, "" << new_path << ": " << xstrerror());
-        fatal("storeDirOpenTmpSwapLog: Failed to open swap log.");
-    }
-
-    swaplog_fd = fd;
-
-    {
-        const StoreSwapLogHeader header;
-        MemBuf buf;
-        buf.init(header.record_size, header.record_size);
-        buf.append(reinterpret_cast<const char*>(&header), sizeof(header));
-        // Pad to keep in sync with UFSSwapDir::writeCleanStart().
-        memset(buf.space(), 0, header.gapSize());
-        buf.appended(header.gapSize());
-        file_write(swaplog_fd, -1, buf.content(), buf.contentSize(),
-                   NULL, NULL, buf.freeFunc());
-    }
-
-    /* open a read-only stream of the old log */
-    fp = fopen(swaplog_path, "rb");
-
-    if (fp == NULL) {
-        debugs(50, 0, "" << swaplog_path << ": " << xstrerror());
-        fatal("Failed to open swap log for reading");
-    }
-
-    memset(&clean_sb, '\0', sizeof(struct stat));
-
-    if (::stat(clean_path, &clean_sb) < 0)
-        *clean_flag = 0;
-    else if (clean_sb.st_mtime < log_sb.st_mtime)
-        *clean_flag = 0;
-    else
-        *clean_flag = 1;
-
-    safeunlink(clean_path, 1);
-
-    safe_free(swaplog_path);
-
-    safe_free(clean_path);
-
-    safe_free(new_path);
-
-    return fp;
-}
-
-class UFSCleanLog : public SwapDir::CleanLog
-{
-
-public:
-    UFSCleanLog(SwapDir *);
-    virtual const StoreEntry *nextEntry();
-    virtual void write(StoreEntry const &);
-    char *cur;
-    char *newLog;
-    char *cln;
-    char *outbuf;
-    off_t outbuf_offset;
-    int fd;
-    RemovalPolicyWalker *walker;
-    SwapDir *sd;
-};
-
-#define CLEAN_BUF_SZ 16384
-
-
-UFSCleanLog::UFSCleanLog(SwapDir *aSwapDir) : cur(NULL),newLog(NULL),cln(NULL),outbuf(NULL),
-        outbuf_offset(0), fd(-1),walker(NULL), sd(aSwapDir)
-{}
-
-/*
- * Begin the process to write clean cache state.  For AUFS this means
- * opening some log files and allocating write buffers.  Return 0 if
- * we succeed, and assign the 'func' and 'data' return pointers.
- */
-int
-UFSSwapDir::writeCleanStart()
-{
-    UFSCleanLog *state = new UFSCleanLog(this);
-    StoreSwapLogHeader header;
-#if HAVE_FCHMOD
-
-    struct stat sb;
-#endif
-
-    cleanLog = NULL;
-    state->newLog = xstrdup(logFile(".clean"));
-    state->fd = file_open(state->newLog, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY);
-
-    if (state->fd < 0) {
-        xfree(state->newLog);
-        delete state;
-        return -1;
-    }
-
-    state->cur = xstrdup(logFile(NULL));
-    state->cln = xstrdup(logFile(".last-clean"));
-    state->outbuf = (char *)xcalloc(CLEAN_BUF_SZ, 1);
-    state->outbuf_offset = 0;
-    /*copy the header */
-    memcpy(state->outbuf, &header, sizeof(StoreSwapLogHeader));
-    // Leave a gap to keep in sync with UFSSwapDir::openTmpSwapLog().
-    memset(state->outbuf + sizeof(StoreSwapLogHeader), 0, header.gapSize());
-    state->outbuf_offset += header.record_size;
-
-    state->walker = repl->WalkInit(repl);
-    ::unlink(state->cln);
-    debugs(47, 3, "storeDirWriteCleanLogs: opened " << state->newLog << ", FD " << state->fd);
-#if HAVE_FCHMOD
-
-    if (::stat(state->cur, &sb) == 0)
-        fchmod(state->fd, sb.st_mode);
-
-#endif
-
-
-    cleanLog = state;
-    return 0;
-}
-
-/*
- * Get the next entry that is a candidate for clean log writing
- */
-const StoreEntry *
-UFSCleanLog::nextEntry()
-{
-    const StoreEntry *entry = NULL;
-
-    if (walker)
-        entry = walker->Next(walker);
-
-    return entry;
-}
-
-/*
- * "write" an entry to the clean log file.
- */
-void
-UFSCleanLog::write(StoreEntry const &e)
-{
-    StoreSwapLogData s;
-    static size_t ss = sizeof(StoreSwapLogData);
-    s.op = (char) SWAP_LOG_ADD;
-    s.swap_filen = e.swap_filen;
-    s.timestamp = e.timestamp;
-    s.lastref = e.lastref;
-    s.expires = e.expires;
-    s.lastmod = e.lastmod;
-    s.swap_file_sz = e.swap_file_sz;
-    s.refcount = e.refcount;
-    s.flags = e.flags;
-    memcpy(&s.key, e.key, SQUID_MD5_DIGEST_LENGTH);
-    s.finalize();
-    memcpy(outbuf + outbuf_offset, &s, ss);
-    outbuf_offset += ss;
-    /* buffered write */
-
-    if (outbuf_offset + ss >= CLEAN_BUF_SZ) {
-        if (FD_WRITE_METHOD(fd, outbuf, outbuf_offset) < 0) {
-            /* XXX This error handling should probably move up to the caller */
-            debugs(50, 0, "storeDirWriteCleanLogs: " << newLog << ": write: " << xstrerror());
-            debugs(50, 0, "storeDirWriteCleanLogs: Current swap logfile not replaced.");
-            file_close(fd);
-            fd = -1;
-            unlink(newLog);
-            sd->cleanLog = NULL;
-            delete this;
-            return;
-        }
-
-        outbuf_offset = 0;
-    }
-}
-
-void
-UFSSwapDir::writeCleanDone()
-{
-    UFSCleanLog *state = (UFSCleanLog *)cleanLog;
-    int fd;
-
-    if (NULL == state)
-        return;
-
-    if (state->fd < 0)
-        return;
-
-    state->walker->Done(state->walker);
-
-    if (FD_WRITE_METHOD(state->fd, state->outbuf, state->outbuf_offset) < 0) {
-        debugs(50, 0, "storeDirWriteCleanLogs: " << state->newLog << ": write: " << xstrerror());
-        debugs(50, 0, "storeDirWriteCleanLogs: Current swap logfile not replaced.");
-        file_close(state->fd);
-        state->fd = -1;
-        ::unlink(state->newLog);
-    }
-
-    safe_free(state->outbuf);
-    /*
-     * You can't rename open files on Microsoft "operating systems"
-     * so we have to close before renaming.
-     */
-    closeLog();
-    /* save the fd value for a later test */
-    fd = state->fd;
-    /* rename */
-
-    if (state->fd >= 0) {
-#if _SQUID_OS2_ || _SQUID_WINDOWS_
-        file_close(state->fd);
-        state->fd = -1;
-#endif
-
-        xrename(state->newLog, state->cur);
-    }
-
-    /* touch a timestamp file if we're not still validating */
-    if (StoreController::store_dirs_rebuilding)
-        (void) 0;
-    else if (fd < 0)
-        (void) 0;
-    else
-        file_close(file_open(state->cln, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY));
-
-    /* close */
-    safe_free(state->cur);
-
-    safe_free(state->newLog);
-
-    safe_free(state->cln);
-
-    if (state->fd >= 0)
-        file_close(state->fd);
-
-    state->fd = -1;
-
-    delete state;
-
-    cleanLog = NULL;
-}
-
-static void
-FreeObject(void *address)
-{
-    StoreSwapLogData *anObject = static_cast <StoreSwapLogData *>(address);
-    delete anObject;
-}
-
-void
-UFSSwapDir::logEntry(const StoreEntry & e, int op) const
-{
-    StoreSwapLogData *s = new StoreSwapLogData;
-    s->op = (char) op;
-    s->swap_filen = e.swap_filen;
-    s->timestamp = e.timestamp;
-    s->lastref = e.lastref;
-    s->expires = e.expires;
-    s->lastmod = e.lastmod;
-    s->swap_file_sz = e.swap_file_sz;
-    s->refcount = e.refcount;
-    s->flags = e.flags;
-    memcpy(s->key, e.key, SQUID_MD5_DIGEST_LENGTH);
-    s->finalize();
-    file_write(swaplog_fd,
-               -1,
-               s,
-               sizeof(StoreSwapLogData),
-               NULL,
-               NULL,
-               FreeObject);
-}
-
-static QS rev_int_sort;
-static int
-rev_int_sort(const void *A, const void *B)
-{
-    const int *i1 = (const int *)A;
-    const int *i2 = (const int *)B;
-    return *i2 - *i1;
-}
-
-int
-UFSSwapDir::DirClean(int swap_index)
-{
-    DIR *dir_pointer = NULL;
-
-    LOCAL_ARRAY(char, p1, MAXPATHLEN + 1);
-    LOCAL_ARRAY(char, p2, MAXPATHLEN + 1);
-
-    int files[20];
-    int swapfileno;
-    int fn;			/* same as swapfileno, but with dirn bits set */
-    int n = 0;
-    int k = 0;
-    int N0, N1, N2;
-    int D0, D1, D2;
-    UFSSwapDir *SD;
-    N0 = NumberOfUFSDirs;
-    D0 = UFSDirToGlobalDirMapping[swap_index % N0];
-    SD = dynamic_cast<UFSSwapDir *>(INDEXSD(D0));
-    assert (SD);
-    N1 = SD->l1;
-    D1 = (swap_index / N0) % N1;
-    N2 = SD->l2;
-    D2 = ((swap_index / N0) / N1) % N2;
-    snprintf(p1, MAXPATHLEN, "%s/%02X/%02X",
-             SD->path, D1, D2);
-    debugs(36, 3, "storeDirClean: Cleaning directory " << p1);
-    dir_pointer = opendir(p1);
-
-    if (dir_pointer == NULL) {
-        if (errno == ENOENT) {
-            debugs(36, 0, "storeDirClean: WARNING: Creating " << p1);
-#if _SQUID_MSWIN_
-
-            if (mkdir(p1) == 0)
-#else
-
-            if (mkdir(p1, 0777) == 0)
-#endif
-
-                return 0;
-        }
-
-        debugs(50, 0, "storeDirClean: " << p1 << ": " << xstrerror());
-        safeunlink(p1, 1);
-        return 0;
-    }
-
-    dirent_t *de;
-    while ((de = readdir(dir_pointer)) != NULL && k < 20) {
-        if (sscanf(de->d_name, "%X", &swapfileno) != 1)
-            continue;
-
-        fn = swapfileno;	/* XXX should remove this cruft ! */
-
-        if (SD->validFileno(fn, 1))
-            if (SD->mapBitTest(fn))
-                if (UFSSwapDir::FilenoBelongsHere(fn, D0, D1, D2))
-                    continue;
-
-        files[k] = swapfileno;
-        ++k;
-    }
-
-    closedir(dir_pointer);
-
-    if (k == 0)
-        return 0;
-
-    qsort(files, k, sizeof(int), rev_int_sort);
-
-    if (k > 10)
-        k = 10;
-
-    for (n = 0; n < k; ++n) {
-        debugs(36, 3, "storeDirClean: Cleaning file "<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << files[n]);
-        snprintf(p2, MAXPATHLEN + 1, "%s/%08X", p1, files[n]);
-        safeunlink(p2, 0);
-        ++statCounter.swap.files_cleaned;
-    }
-
-    debugs(36, 3, "Cleaned " << k << " unused files from " << p1);
-    return k;
-}
-
-void
-UFSSwapDir::CleanEvent(void *unused)
-{
-    static int swap_index = 0;
-    int i;
-    int j = 0;
-    int n = 0;
-    /*
-     * Assert that there are UFS cache_dirs configured, otherwise
-     * we should never be called.
-     */
-    assert(NumberOfUFSDirs);
-
-    if (NULL == UFSDirToGlobalDirMapping) {
-        SwapDir *sd;
-        /*
-         * Initialize the little array that translates UFS cache_dir
-         * number into the Config.cacheSwap.swapDirs array index.
-         */
-        UFSDirToGlobalDirMapping = (int *)xcalloc(NumberOfUFSDirs, sizeof(*UFSDirToGlobalDirMapping));
-
-        for (i = 0, n = 0; i < Config.cacheSwap.n_configured; ++i) {
-            /* This is bogus, the controller should just clean each instance once */
-            sd = dynamic_cast <SwapDir *>(INDEXSD(i));
-
-            if (!UFSSwapDir::IsUFSDir(sd))
-                continue;
-
-            UFSSwapDir *usd = dynamic_cast<UFSSwapDir *>(sd);
-
-            assert (usd);
-
-            UFSDirToGlobalDirMapping[n] = i;
-            ++n;
-
-            j += (usd->l1 * usd->l2);
-        }
-
-        assert(n == NumberOfUFSDirs);
-        /*
-         * Start the commonUfsDirClean() swap_index with a random
-         * value.  j equals the total number of UFS level 2
-         * swap directories
-         */
-        swap_index = (int) (squid_random() % j);
-    }
-
-    /* if the rebuild is finished, start cleaning directories. */
-    if (0 == StoreController::store_dirs_rebuilding) {
-        n = DirClean(swap_index);
-        ++swap_index;
-    }
-
-    eventAdd("storeDirClean", CleanEvent, NULL,
-             15.0 * exp(-0.25 * n), 1);
-}
-
-int
-UFSSwapDir::IsUFSDir(SwapDir * sd)
-{
-    UFSSwapDir *mySD = dynamic_cast<UFSSwapDir *>(sd);
-    return mySD ? 1 : 0 ;
-}
-
-/*
- * Does swapfile number 'fn' belong in cachedir #F0,
- * level1 dir #F1, level2 dir #F2?
- * XXX: this is broken - it assumes all cache dirs use the same
- * l1 and l2 scheme. -RBC 20021215. Partial fix is in place -
- * if not UFSSwapDir return 0;
- */
-int
-UFSSwapDir::FilenoBelongsHere(int fn, int F0, int F1, int F2)
-{
-    int D1, D2;
-    int L1, L2;
-    int filn = fn;
-    assert(F0 < Config.cacheSwap.n_configured);
-    assert (UFSSwapDir::IsUFSDir (dynamic_cast<SwapDir *>(INDEXSD(F0))));
-    UFSSwapDir *sd = dynamic_cast<UFSSwapDir *>(INDEXSD(F0));
-
-    if (!sd)
-        return 0;
-
-    L1 = sd->l1;
-
-    L2 = sd->l2;
-
-    D1 = ((filn / L2) / L2) % L1;
-
-    if (F1 != D1)
-        return 0;
-
-    D2 = (filn / L2) % L2;
-
-    if (F2 != D2)
-        return 0;
-
-    return 1;
-}
-
-
-int
-UFSSwapDir::validFileno(sfileno filn, int flag) const
-{
-    if (filn < 0)
-        return 0;
-
-    /*
-     * If flag is set it means out-of-range file number should
-     * be considered invalid.
-     */
-    if (flag)
-        if (filn > map->capacity())
-            return 0;
-
-    return 1;
-}
-
-
-
-/*
- * UFSSwapDir::unlinkFile
- *
- * This routine unlinks a file and pulls it out of the bitmap.
- * It used to be in commonUfsUnlink(), however an interface change
- * forced this bit of code here. Eeek.
- */
-void
-UFSSwapDir::unlinkFile(sfileno f)
-{
-    debugs(79, 3, "UFSSwapDir::unlinkFile: unlinking fileno " <<  std::setfill('0') <<
-           std::hex << std::uppercase << std::setw(8) << f << " '" <<
-           fullPath(f,NULL) << "'");
-    /* commonUfsDirMapBitReset(this, f); */
-    IO->unlinkFile(fullPath(f,NULL));
-}
-
-bool
-UFSSwapDir::unlinkdUseful() const
-{
-    // unlinkd may be useful only in workers
-    return IamWorkerProcess() && IO->io->unlinkdUseful();
-}
-
-void
-UFSSwapDir::unlink(StoreEntry & e)
-{
-    debugs(79, 3, "storeUfsUnlink: dirno " << index  << ", fileno "<<
-           std::setfill('0') << std::hex << std::uppercase << std::setw(8) << e.swap_filen);
-    if (e.swap_status == SWAPOUT_DONE) {
-        cur_size -= fs.blksize * sizeInBlocks(e.swap_file_sz);
-        --n_disk_objects;
-    }
-    replacementRemove(&e);
-    mapBitReset(e.swap_filen);
-    UFSSwapDir::unlinkFile(e.swap_filen);
-}
-
-/*
- * Add and remove the given StoreEntry from the replacement policy in
- * use.
- */
-
-void
-UFSSwapDir::replacementAdd(StoreEntry * e)
-{
-    debugs(47, 4, "UFSSwapDir::replacementAdd: added node " << e << " to dir " << index);
-    repl->Add(repl, e, &e->repl);
-}
-
-
-void
-UFSSwapDir::replacementRemove(StoreEntry * e)
-{
-    StorePointer SD;
-
-    if (e->swap_dirn < 0)
-        return;
-
-    SD = INDEXSD(e->swap_dirn);
-
-    assert (dynamic_cast<UFSSwapDir *>(SD.getRaw()) == this);
-
-    debugs(47, 4, "UFSSwapDir::replacementRemove: remove node " << e << " from dir " << index);
-
-    repl->Remove(repl, e, &e->repl);
-}
-
-void
-UFSSwapDir::dump(StoreEntry & entry) const
-{
-    storeAppendPrintf(&entry, " %" PRIu64 " %d %d", maxSize() >> 20, l1, l2);
-    dumpOptions(&entry);
-}
-
-char *
-UFSSwapDir::fullPath(sfileno filn, char *fullpath) const
-{
-    LOCAL_ARRAY(char, fullfilename, MAXPATHLEN);
-    int L1 = l1;
-    int L2 = l2;
-
-    if (!fullpath)
-        fullpath = fullfilename;
-
-    fullpath[0] = '\0';
-
-    snprintf(fullpath, MAXPATHLEN, "%s/%02X/%02X/%08X",
-             path,
-             ((filn / L2) / L2) % L1,
-             (filn / L2) % L2,
-             filn);
-
-    return fullpath;
-}
-
-int
-UFSSwapDir::callback()
-{
-    return IO->callback();
-}
-
-void
-UFSSwapDir::sync()
-{
-    IO->sync();
-}
-
-void
-UFSSwapDir::swappedOut(const StoreEntry &e)
-{
-    cur_size += fs.blksize * sizeInBlocks(e.swap_file_sz);
-    ++n_disk_objects;
-}
-
-StoreSearch *
-UFSSwapDir::search(String const url, HttpRequest *request)
-{
-    if (url.size())
-        fatal ("Cannot search by url yet\n");
-
-    return new StoreSearchUFS (this);
-}
-
-CBDATA_CLASS_INIT(StoreSearchUFS);
-StoreSearchUFS::StoreSearchUFS(RefCount<UFSSwapDir> aSwapDir) : sd(aSwapDir), walker (sd->repl->WalkInit(sd->repl)), current (NULL), _done (false)
-{}
-
-/* do not link
-StoreSearchUFS::StoreSearchUFS(StoreSearchUFS const &);
-*/
-
-StoreSearchUFS::~StoreSearchUFS()
-{
-    walker->Done(walker);
-    walker = NULL;
-}
-
-void
-StoreSearchUFS::next(void (aCallback)(void *cbdata), void *aCallbackArgs)
-{
-    next();
-    aCallback(aCallbackArgs);
-}
-
-bool
-StoreSearchUFS::next()
-{
-    /* the walker API doesn't make sense. the store entries referred to are already readwrite
-     * from their hash table entries
-     */
-
-    if (walker)
-        current = const_cast<StoreEntry *>(walker->Next(walker));
-
-    if (current == NULL)
-        _done = true;
-
-    return current != NULL;
-}
-
-bool
-StoreSearchUFS::error() const
-{
-    return false;
-}
-
-bool
-StoreSearchUFS::isDone() const
-{
-    return _done;
-}
-
-StoreEntry *
-StoreSearchUFS::currentItem()
-{
-    return current;
-}

=== modified file 'src/fs/ufs/store_io_ufs.cc'
--- src/fs/ufs/store_io_ufs.cc	2012-01-20 18:55:04 +0000
+++ src/fs/ufs/store_io_ufs.cc	2012-08-02 21:18:43 +0000
@@ -35,7 +35,6 @@
 
 #include "squid-old.h"
 #include "Store.h"
-#include "ufscommon.h"
 #include "Generic.h"
 #include "DiskIO/DiskFile.h"
 #include "DiskIO/DiskIOStrategy.h"
@@ -43,45 +42,9 @@
 #include "DiskIO/WriteRequest.h"
 
 #include "SwapDir.h"
-
-bool
-UFSStrategy::shedLoad()
-{
-    return io->shedLoad();
-}
-
-int
-UFSStrategy::load()
-{
-    return io->load();
-}
-
-UFSStrategy::UFSStrategy (DiskIOStrategy *anIO) : io(anIO)
-{}
-
-UFSStrategy::~UFSStrategy ()
-{
-    delete io;
-}
-
-StoreIOState::Pointer
-UFSStrategy::createState(SwapDir *SD, StoreEntry *e, StoreIOState::STIOCB * aCallback, void *callback_data) const
-{
-    return new UFSStoreState (SD, e, aCallback, callback_data);
-}
-
-DiskFile::Pointer
-UFSStrategy::newFile (char const *path)
-{
-    return io->newFile(path);
-}
-
-
-void
-UFSStrategy::unlinkFile(char const *path)
-{
-    io->unlinkFile(path);
-}
+#include "UFSStrategy.h"
+#include "UFSStoreState.h"
+
 
 CBDATA_CLASS_INIT(UFSStoreState);
 
@@ -140,7 +103,7 @@
 UFSStoreState::openDone()
 {
     if (closing)
-        debugs(0,0,HERE << "already closing in openDone()!?");
+        debugs(0, DBG_CRITICAL, HERE << "already closing in openDone()!?");
 
     if (theFile->error()) {
         tryClosing();
@@ -238,8 +201,8 @@
            std::setfill('0') << std::hex << std::uppercase << std::setw(8) << swap_filen);
 
     if (theFile->error()) {
-        debugs(79,1,HERE << "avoid write on theFile with error");
-        debugs(79,1,HERE << "calling free_func for " << (void*) buf);
+        debugs(79, DBG_IMPORTANT,HERE << "avoid write on theFile with error");
+        debugs(79, DBG_IMPORTANT,HERE << "calling free_func for " << (void*) buf);
         free_func((void*)buf);
         return;
     }
@@ -270,7 +233,7 @@
     }
 
     if (theFile->error()) {
-        debugs(79,1,HERE << "avoid write on theFile with error");
+        debugs(79, DBG_IMPORTANT,HERE << "avoid write on theFile with error");
         debugs(79,3,HERE << "calling free_func for " << (void*) q->buf);
         /*
          * DPW 2006-05-24
@@ -554,109 +517,3 @@
     linklistPush(&pending_writes, q);
 }
 
-StoreIOState::Pointer
-UFSStrategy::open(SwapDir * SD, StoreEntry * e, StoreIOState::STFNCB * file_callback,
-                  StoreIOState::STIOCB * aCallback, void *callback_data)
-{
-    assert (((UFSSwapDir *)SD)->IO == this);
-    debugs(79, 3, "UFSStrategy::open: fileno "<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << e->swap_filen);
-
-    /* to consider: make createstate a private UFSStrategy call */
-    StoreIOState::Pointer sio = createState (SD, e, aCallback, callback_data);
-
-    sio->mode |= O_RDONLY;
-
-    UFSStoreState *state = dynamic_cast <UFSStoreState *>(sio.getRaw());
-
-    assert (state);
-
-    char *path = ((UFSSwapDir *)SD)->fullPath(e->swap_filen, NULL);
-
-    DiskFile::Pointer myFile = newFile (path);
-
-    if (myFile.getRaw() == NULL)
-        return NULL;
-
-    state->theFile = myFile;
-
-    state->opening = true;
-
-    myFile->open (sio->mode, 0644, state);
-
-    if (myFile->error())
-        return NULL;
-
-    return sio;
-}
-
-StoreIOState::Pointer
-UFSStrategy::create(SwapDir * SD, StoreEntry * e, StoreIOState::STFNCB * file_callback,
-                    StoreIOState::STIOCB * aCallback, void *callback_data)
-{
-    assert (((UFSSwapDir *)SD)->IO == this);
-    /* Allocate a number */
-    sfileno filn = ((UFSSwapDir *)SD)->mapBitAllocate();
-    debugs(79, 3, "UFSStrategy::create: fileno "<< std::setfill('0') << std::hex << std::uppercase << std::setw(8) << filn);
-
-    /* Shouldn't we handle a 'bitmap full' error here? */
-
-    StoreIOState::Pointer sio = createState (SD, e, aCallback, callback_data);
-
-    sio->mode |= O_WRONLY | O_CREAT | O_TRUNC;
-
-    sio->swap_filen = filn;
-
-    UFSStoreState *state = dynamic_cast <UFSStoreState *>(sio.getRaw());
-
-    assert (state);
-
-    char *path = ((UFSSwapDir *)SD)->fullPath(filn, NULL);
-
-    DiskFile::Pointer myFile = newFile (path);
-
-    if (myFile.getRaw() == NULL) {
-        ((UFSSwapDir *)SD)->mapBitReset (filn);
-        return NULL;
-    }
-
-    state->theFile = myFile;
-
-    state->creating = true;
-
-    myFile->create (state->mode, 0644, state);
-
-    if (myFile->error()) {
-        ((UFSSwapDir *)SD)->mapBitReset (filn);
-        return NULL;
-    }
-
-    /* now insert into the replacement policy */
-    ((UFSSwapDir *)SD)->replacementAdd(e);
-
-    return sio;
-}
-
-int
-UFSStrategy::callback()
-{
-    return io->callback();
-}
-
-void
-UFSStrategy::init()
-{
-    io->init();
-}
-
-void
-UFSStrategy::sync()
-{
-    io->sync();
-}
-
-void
-UFSStrategy::statfs(StoreEntry & sentry)const
-{
-    io->statfs(sentry);
-}
-

=== removed file 'src/fs/ufs/ufscommon.cc'
--- src/fs/ufs/ufscommon.cc	2012-07-23 07:02:06 +0000
+++ src/fs/ufs/ufscommon.cc	1970-01-01 00:00:00 +0000
@@ -1,841 +0,0 @@
-/*
- * $Id$
- *
- * DEBUG: section 47    Store Directory Routines
- * AUTHOR: Robert Collins
- *
- * SQUID Web Proxy Cache          http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- *  Squid is the result of efforts by numerous individuals from
- *  the Internet community; see the CONTRIBUTORS file for full
- *  details.   Many organizations have provided support for Squid's
- *  development; see the SPONSORS file for full details.  Squid is
- *  Copyrighted (C) 2001 by the Regents of the University of
- *  California; see the COPYRIGHT file for full details.  Squid
- *  incorporates software developed and/or copyrighted by other
- *  sources; see the CREDITS file for full details.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- * Copyright (c) 2003, Robert Collins <robertc@squid-cache.org>
- */
-
-#include "squid.h"
-#include "ufscommon.h"
-#include "Store.h"
-#include "fde.h"
-#include "SquidTime.h"
-#include "StoreMeta.h"
-#include "Generic.h"
-#include "StoreMetaUnpacker.h"
-#include "RefCount.h"
-#include "StoreSwapLogData.h"
-#include "swap_log_op.h"
-
-
-CBDATA_CLASS_INIT(RebuildState);
-
-/// Parse a swap header entry created on a system with 32-bit size_t and sfileno
-/// this is typical of 32-bit systems without large file support
-/// NP: SQUID_MD5_DIGEST_LENGTH is very risky still.
-class UFSSwapLogParser_v1_32bs:public UFSSwapLogParser
-{
-public:
-    /// version 1 cache swap.state entry with 32-bit size_t (swap_file_sz)
-    /// time_t an sfileno have no variation from the v1 baseline format
-    struct StoreSwapLogDataOld {
-        char op;
-        sfileno swap_filen;
-        time_t timestamp;
-        time_t lastref;
-        time_t expires;
-        time_t lastmod;
-        uint32_t swap_file_sz;
-        uint16_t refcount;
-        uint16_t flags;
-        unsigned char key[SQUID_MD5_DIGEST_LENGTH];
-    };
-    UFSSwapLogParser_v1_32bs(FILE *fp):UFSSwapLogParser(fp) {
-        record_size = sizeof(UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld);
-    }
-    /// Convert the on-disk 32-bit format to our current format while reading
-    bool ReadRecord(StoreSwapLogData &swapData) {
-        UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld readData;
-        int bytes = sizeof(UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld);
-
-        assert(log);
-
-        if (fread(&readData, bytes, 1, log) != 1) {
-            return false;
-        }
-        swapData.op = readData.op;
-        swapData.swap_filen = readData.swap_filen;
-        swapData.timestamp = readData.timestamp;
-        swapData.lastref = readData.lastref;
-        swapData.expires = readData.expires;
-        swapData.lastmod = readData.lastmod;
-        swapData.swap_file_sz = readData.swap_file_sz;
-        swapData.refcount = readData.refcount;
-        swapData.flags = readData.flags;
-        memcpy(swapData.key, readData.key, SQUID_MD5_DIGEST_LENGTH);
-        return true;
-    }
-};
-
-#if UNUSED_CODE
-/// Parse a swap header entry created on a system with 32-bit size_t, time_t and sfileno
-/// this is typical of 32-bit systems without large file support and with old kernels
-/// NP: SQUID_MD5_DIGEST_LENGTH is very risky still.
-class UFSSwapLogParser_v1_32bst:public UFSSwapLogParser
-{
-public:
-    /// version 1 cache swap.state entry with 32-bit size_t (swap_file_sz)
-    /// time_t also differs
-    /// sfileno has no variation from the v1 baseline format
-    struct StoreSwapLogDataOld {
-        char op;
-        sfileno swap_filen;
-        int32_t timestamp;
-        int32_t lastref;
-        int32_t expires;
-        int32_t lastmod;
-        uint32_t swap_file_sz;
-        uint16_t refcount;
-        uint16_t flags;
-        unsigned char key[SQUID_MD5_DIGEST_LENGTH];
-    };
-    UFSSwapLogParser_v1_32bst(FILE *fp):UFSSwapLogParser(fp) {
-        record_size = sizeof(UFSSwapLogParser_v1_32bst::StoreSwapLogDataOld);
-    }
-    /// Convert the on-disk 32-bit format to our current format while reading
-    bool ReadRecord(StoreSwapLogData &swapData) {
-        UFSSwapLogParser_v1_32bst::StoreSwapLogDataOld readData;
-        int bytes = sizeof(UFSSwapLogParser_v1_32bst::StoreSwapLogDataOld);
-
-        assert(log);
-
-        if (fread(&readData, bytes, 1, log) != 1) {
-            return false;
-        }
-        swapData.op = readData.op;
-        swapData.swap_filen = readData.swap_filen;
-        swapData.timestamp = readData.timestamp;
-        swapData.lastref = readData.lastref;
-        swapData.expires = readData.expires;
-        swapData.lastmod = readData.lastmod;
-        swapData.swap_file_sz = readData.swap_file_sz;
-        swapData.refcount = readData.refcount;
-        swapData.flags = readData.flags;
-        memcpy(swapData.key, readData.key, SQUID_MD5_DIGEST_LENGTH);
-        return true;
-    }
-};
-
-/// Parse a swap header entry created on a system with 64-bit size_t and sfileno
-/// this is typical of 64-bit systems prior to this patch fixing sfileno to 32-bits
-/// NP: SQUID_MD5_DIGEST_LENGTH is very risky still.
-class UFSSwapLogParser_v1_64bfn:public UFSSwapLogParser
-{
-public:
-    /// version 1 cache swap.state entry with 64-bit sfileno
-    struct StoreSwapLogDataOld {
-        char op;
-        int64_t swap_filen;
-        time_t timestamp;
-        time_t lastref;
-        time_t expires;
-        time_t lastmod;
-        uint64_t swap_file_sz;
-        uint16_t refcount;
-        uint16_t flags;
-        unsigned char key[SQUID_MD5_DIGEST_LENGTH];
-    };
-    UFSSwapLogParser_v1_64bfn(FILE *fp):UFSSwapLogParser(fp) {
-        record_size = sizeof(UFSSwapLogParser_v1_64bfn::StoreSwapLogDataOld);
-    }
-    /// Convert the on-disk 64-bit format to our current format while reading
-    bool ReadRecord(StoreSwapLogData &swapData) {
-        UFSSwapLogParser_v1_64bfn::StoreSwapLogDataOld readData;
-        int bytes = sizeof(UFSSwapLogParser_v1_64bfn::StoreSwapLogDataOld);
-
-        assert(log);
-
-        if (fread(&readData, bytes, 1, log) != 1) {
-            return false;
-        }
-        swapData.op = readData.op;
-        if ((readData.swap_filen>>32) != 0) {
-            fatalf("File ID on record is greater than maximum cache file ID.");
-        }
-        swapData.swap_filen = (int32_t)readData.swap_filen;
-        swapData.timestamp = readData.timestamp;
-        swapData.lastref = readData.lastref;
-        swapData.expires = readData.expires;
-        swapData.lastmod = readData.lastmod;
-        swapData.swap_file_sz = readData.swap_file_sz;
-        swapData.refcount = readData.refcount;
-        swapData.flags = readData.flags;
-        memcpy(swapData.key, readData.key, SQUID_MD5_DIGEST_LENGTH);
-        return true;
-    }
-};
-
-class UFSSwapLogParser_v1:public UFSSwapLogParser
-{
-public:
-    UFSSwapLogParser_v1(FILE *fp):UFSSwapLogParser(fp) {
-        record_size = sizeof(StoreSwapLogData);
-    }
-    bool ReadRecord(StoreSwapLogData &swapData);
-};
-
-
-bool UFSSwapLogParser_v1::ReadRecord(StoreSwapLogData &swapData)
-{
-    int bytes = sizeof(StoreSwapLogData);
-
-    assert(log);
-
-    if (fread(&swapData, bytes, 1, log) != 1) {
-        return false;
-    }
-    return true;
-}
-#endif /* UNUSED_CODE */
-
-/// swap.state v2 log parser
-class UFSSwapLogParser_v2: public UFSSwapLogParser
-{
-public:
-    UFSSwapLogParser_v2(FILE *fp): UFSSwapLogParser(fp) {
-        record_size = sizeof(StoreSwapLogData);
-    }
-    bool ReadRecord(StoreSwapLogData &swapData) {
-        assert(log);
-        return fread(&swapData, sizeof(StoreSwapLogData), 1, log) == 1;
-    }
-};
-
-
-UFSSwapLogParser *UFSSwapLogParser::GetUFSSwapLogParser(FILE *fp)
-{
-    StoreSwapLogHeader header;
-
-    assert(fp);
-
-    if (fread(&header, sizeof(StoreSwapLogHeader), 1, fp) != 1)
-        return NULL;
-
-    if (header.op != SWAP_LOG_VERSION) {
-        debugs(47, 1, "Old swap file detected...");
-        fseek(fp, 0, SEEK_SET);
-        return new UFSSwapLogParser_v1_32bs(fp); // Um. 32-bits except time_t, and can't determine that.
-    }
-
-    debugs(47, 2, "Swap file version: " << header.version);
-
-    if (header.version == 1) {
-        if (fseek(fp, header.record_size, SEEK_SET) != 0)
-            return NULL;
-
-        debugs(47, DBG_IMPORTANT, "Rejecting swap file v1 to avoid cache " <<
-               "index corruption. Forcing a full cache index rebuild. " <<
-               "See Squid bug #3441.");
-        return NULL;
-
-#if UNUSED_CODE
-        // baseline
-        // 32-bit sfileno
-        // native time_t (hopefully 64-bit)
-        // 64-bit file size
-        if (header.record_size == sizeof(StoreSwapLogData)) {
-            debugs(47, 1, "Version 1 of swap file with LFS support detected... ");
-            return new UFSSwapLogParser_v1(fp);
-        }
-
-        // which means we have a 3-way grid of permutations to import (yuck!)
-        // 1) sfileno 32-bit / 64-bit  (64-bit was broken)
-        // 2) time_t 32-bit / 64-bit
-        // 3) size_t 32-bit / 64-bit  (32-bit was pre-LFS)
-
-        // 32-bit systems...
-        // only LFS (size_t) differs from baseline
-        if (header.record_size == sizeof(struct UFSSwapLogParser_v1_32bs::StoreSwapLogDataOld)) {
-            debugs(47, 1, "Version 1 (32-bit) swap file without LFS support detected... ");
-            return new UFSSwapLogParser_v1_32bs(fp);
-        }
-        // LFS (size_t) and timestamps (time_t) differs from baseline
-        if (header.record_size == sizeof(struct UFSSwapLogParser_v1_32bst::StoreSwapLogDataOld)) {
-            debugs(47, 1, "Version 1 (32-bit) swap file with short timestamps and without LFS support detected... ");
-            return new UFSSwapLogParser_v1_32bst(fp);
-        }
-        // No downgrade for 64-bit timestamps to 32-bit.
-
-        // 64-bit systems
-        // sfileno was 64-bit for a some builds
-        if (header.record_size == sizeof(struct UFSSwapLogParser_v1_64bfn::StoreSwapLogDataOld)) {
-            debugs(47, 1, "Version 1 (64-bit) swap file with broken sfileno detected... ");
-            return new UFSSwapLogParser_v1_64bfn(fp);
-        }
-        // NP: 64-bit system with 32-bit size_t/time_t are not handled.
-
-        debugs(47, 1, "WARNING: The swap file has wrong format!... ");
-        debugs(47, 1, "NOTE: Cannot safely downgrade caches to short (32-bit) timestamps.");
-        return NULL;
-#endif
-    }
-
-    if (header.version >= 2) {
-        if (!header.sane()) {
-            debugs(47, DBG_IMPORTANT, "ERROR: Corrupted v" << header.version <<
-                   " swap file header.");
-            return NULL;
-        }
-
-        if (fseek(fp, header.record_size, SEEK_SET) != 0)
-            return NULL;
-
-        if (header.version == 2)
-            return new UFSSwapLogParser_v2(fp);
-    }
-
-    // TODO: v3: write to disk in network-order bytes for the larger fields?
-
-    debugs(47, DBG_IMPORTANT, "Unknown swap file version: " << header.version);
-    return NULL;
-}
-
-int UFSSwapLogParser::SwapLogEntries()
-{
-    struct stat sb;
-
-    if (log_entries >= 0)
-        return log_entries;
-
-    if (log && record_size && 0 == fstat(fileno(log), &sb)) {
-        log_entries = sb.st_size/record_size;
-        return log_entries;
-    }
-
-    return 0;
-}
-
-
-
-
-RebuildState::RebuildState (RefCount<UFSSwapDir> aSwapDir) : sd (aSwapDir),LogParser(NULL), e(NULL), fromLog(true), _done (false)
-{
-    /*
-     * If the swap.state file exists in the cache_dir, then
-     * we'll use commonUfsDirRebuildFromSwapLog(), otherwise we'll
-     * use commonUfsDirRebuildFromDirectory() to open up each file
-     * and suck in the meta data.
-     */
-    int clean = 0;
-    int zeroLengthLog = 0;
-    FILE *fp = sd->openTmpSwapLog(&clean, &zeroLengthLog);
-
-    if (fp && !zeroLengthLog)
-        LogParser = UFSSwapLogParser::GetUFSSwapLogParser(fp);
-
-    if (LogParser == NULL ) {
-        fromLog = false;
-
-        if (fp != NULL)
-            fclose(fp);
-
-    } else {
-        fromLog = true;
-        flags.clean = (unsigned int) clean;
-    }
-
-    if (!clean)
-        flags.need_to_validate = 1;
-
-    debugs(47, DBG_IMPORTANT, "Rebuilding storage in " << sd->path << " (" <<
-           (clean ? "clean log" : (LogParser ? "dirty log" : "no log")) << ")");
-}
-
-RebuildState::~RebuildState()
-{
-    sd->closeTmpSwapLog();
-
-    if (LogParser)
-        delete LogParser;
-}
-
-void
-RebuildState::RebuildStep(void *data)
-{
-    RebuildState *rb = (RebuildState *)data;
-    rb->rebuildStep();
-
-    if (!rb->isDone())
-        eventAdd("storeRebuild", RebuildStep, rb, 0.01, 1);
-    else {
-        -- StoreController::store_dirs_rebuilding;
-        storeRebuildComplete(&rb->counts);
-        delete rb;
-    }
-}
-
-/// load entries from swap.state or files until we run out of entries or time
-void
-RebuildState::rebuildStep()
-{
-    currentEntry(NULL);
-
-    // Balance our desire to maximize the number of entries processed at once
-    // (and, hence, minimize overheads and total rebuild time) with a
-    // requirement to also process Coordinator events, disk I/Os, etc.
-    const int maxSpentMsec = 50; // keep small: most RAM I/Os are under 1ms
-    const timeval loopStart = current_time;
-
-    const int totalEntries = LogParser ? LogParser->SwapLogEntries() : -1;
-
-    while (!isDone()) {
-        if (fromLog)
-            rebuildFromSwapLog();
-        else
-            rebuildFromDirectory();
-
-        // TODO: teach storeRebuildProgress to handle totalEntries <= 0
-        if (totalEntries > 0 && (n_read % 4000 == 0))
-            storeRebuildProgress(sd->index, totalEntries, n_read);
-
-        if (opt_foreground_rebuild)
-            continue; // skip "few entries at a time" check below
-
-        getCurrentTime();
-        const double elapsedMsec = tvSubMsec(loopStart, current_time);
-        if (elapsedMsec > maxSpentMsec || elapsedMsec < 0) {
-            debugs(47, 5, HERE << "pausing after " << n_read << " entries in " <<
-                   elapsedMsec << "ms; " << (elapsedMsec/n_read) << "ms per entry");
-            break;
-        }
-    }
-}
-
-/// process one cache file
-void
-RebuildState::rebuildFromDirectory()
-{
-    cache_key key[SQUID_MD5_DIGEST_LENGTH];
-
-    struct stat sb;
-    int fd = -1;
-    assert(this != NULL);
-    debugs(47, 3, "commonUfsDirRebuildFromDirectory: DIR #" << sd->index);
-
-    assert(fd == -1);
-    sfileno filn = 0;
-    int size;
-    fd = getNextFile(&filn, &size);
-
-    if (fd == -2) {
-        debugs(47, DBG_IMPORTANT, "Done scanning " << sd->path << " dir (" <<
-               n_read << " entries)");
-        _done = true;
-        return;
-    } else if (fd < 0) {
-        return;
-    }
-
-    assert(fd > -1);
-    /* lets get file stats here */
-
-    ++n_read;
-
-    if (fstat(fd, &sb) < 0) {
-        debugs(47, 1, "commonUfsDirRebuildFromDirectory: fstat(FD " << fd << "): " << xstrerror());
-        file_close(fd);
-        --store_open_disk_fd;
-        fd = -1;
-        return;
-    }
-
-    MemBuf buf;
-    buf.init(SM_PAGE_SIZE, SM_PAGE_SIZE);
-    if (!storeRebuildLoadEntry(fd, sd->index, buf, counts))
-        return;
-
-    StoreEntry tmpe;
-    const bool loaded = storeRebuildParseEntry(buf, tmpe, key, counts,
-                        (int64_t)sb.st_size);
-
-    file_close(fd);
-    --store_open_disk_fd;
-    fd = -1;
-
-    if (!loaded) {
-        // XXX: shouldn't this be a call to commonUfsUnlink?
-        sd->unlinkFile(filn); // should we unlink in all failure cases?
-        return;
-    }
-
-    if (!storeRebuildKeepEntry(tmpe, key, counts))
-        return;
-
-    ++counts.objcount;
-    // tmpe.dump(5);
-    currentEntry(sd->addDiskRestore(key,
-                                    filn,
-                                    tmpe.swap_file_sz,
-                                    tmpe.expires,
-                                    tmpe.timestamp,
-                                    tmpe.lastref,
-                                    tmpe.lastmod,
-                                    tmpe.refcount,	/* refcount */
-                                    tmpe.flags,		/* flags */
-                                    (int) flags.clean));
-    storeDirSwapLog(currentEntry(), SWAP_LOG_ADD);
-}
-
-StoreEntry *
-RebuildState::currentEntry() const
-{
-    return e;
-}
-
-void
-RebuildState::currentEntry(StoreEntry *newValue)
-{
-    e = newValue;
-}
-
-/// process one swap log entry
-void
-RebuildState::rebuildFromSwapLog()
-{
-    StoreSwapLogData swapData;
-
-    if (LogParser->ReadRecord(swapData) != 1) {
-        debugs(47, 1, "Done reading " << sd->path << " swaplog (" << n_read << " entries)");
-        LogParser->Close();
-        delete LogParser;
-        LogParser = NULL;
-        _done = true;
-        return;
-    }
-
-    ++n_read;
-
-    if (!swapData.sane()) {
-        ++counts.invalid;
-        return;
-    }
-
-    /*
-     * BC: during 2.4 development, we changed the way swap file
-     * numbers are assigned and stored.  The high 16 bits used
-     * to encode the SD index number.  There used to be a call
-     * to storeDirProperFileno here that re-assigned the index
-     * bits.  Now, for backwards compatibility, we just need
-     * to mask it off.
-     */
-    swapData.swap_filen &= 0x00FFFFFF;
-
-    debugs(47, 3, "commonUfsDirRebuildFromSwapLog: " <<
-           swap_log_op_str[(int) swapData.op]  << " " <<
-           storeKeyText(swapData.key)  << " "<< std::setfill('0') <<
-           std::hex << std::uppercase << std::setw(8) <<
-           swapData.swap_filen);
-
-    if (swapData.op == SWAP_LOG_ADD) {
-        (void) 0;
-    } else if (swapData.op == SWAP_LOG_DEL) {
-        /* Delete unless we already have a newer copy anywhere in any store */
-        /* this needs to become
-         * 1) unpack url
-         * 2) make synthetic request with headers ?? or otherwise search
-         * for a matching object in the store
-         * TODO FIXME change to new async api
-         */
-        currentEntry (Store::Root().get(swapData.key));
-
-        if (currentEntry() != NULL && swapData.lastref >= e->lastref) {
-            undoAdd();
-            --counts.objcount;
-            ++counts.cancelcount;
-        }
-        return;
-    } else {
-        const double
-        x = ::log(static_cast<double>(++counts.bad_log_op)) / ::log(10.0);
-
-        if (0.0 == x - (double) (int) x)
-            debugs(47, 1, "WARNING: " << counts.bad_log_op << " invalid swap log entries found");
-
-        ++counts.invalid;
-
-        return;
-    }
-
-    ++counts.scancount; // XXX: should not this be incremented earlier?
-
-    if (!sd->validFileno(swapData.swap_filen, 0)) {
-        ++counts.invalid;
-        return;
-    }
-
-    if (EBIT_TEST(swapData.flags, KEY_PRIVATE)) {
-        ++counts.badflags;
-        return;
-    }
-
-    /* this needs to become
-     * 1) unpack url
-     * 2) make synthetic request with headers ?? or otherwise search
-     * for a matching object in the store
-     * TODO FIXME change to new async api
-     */
-    currentEntry (Store::Root().get(swapData.key));
-
-    int used;			/* is swapfile already in use? */
-
-    used = sd->mapBitTest(swapData.swap_filen);
-
-    /* If this URL already exists in the cache, does the swap log
-     * appear to have a newer entry?  Compare 'lastref' from the
-     * swap log to e->lastref. */
-    /* is the log entry newer than current entry? */
-    int disk_entry_newer = currentEntry() ? (swapData.lastref > currentEntry()->lastref ? 1 : 0) : 0;
-
-    if (used && !disk_entry_newer) {
-        /* log entry is old, ignore it */
-        ++counts.clashcount;
-        return;
-    } else if (used && currentEntry() && currentEntry()->swap_filen == swapData.swap_filen && currentEntry()->swap_dirn == sd->index) {
-        /* swapfile taken, same URL, newer, update meta */
-
-        if (currentEntry()->store_status == STORE_OK) {
-            currentEntry()->lastref = swapData.timestamp;
-            currentEntry()->timestamp = swapData.timestamp;
-            currentEntry()->expires = swapData.expires;
-            currentEntry()->lastmod = swapData.lastmod;
-            currentEntry()->flags = swapData.flags;
-            currentEntry()->refcount += swapData.refcount;
-            sd->dereference(*currentEntry());
-        } else {
-            debug_trap("commonUfsDirRebuildFromSwapLog: bad condition");
-            debugs(47, 1, "\tSee " << __FILE__ << ":" << __LINE__);
-        }
-        return;
-    } else if (used) {
-        /* swapfile in use, not by this URL, log entry is newer */
-        /* This is sorta bad: the log entry should NOT be newer at this
-         * point.  If the log is dirty, the filesize check should have
-         * caught this.  If the log is clean, there should never be a
-         * newer entry. */
-        debugs(47, 1, "WARNING: newer swaplog entry for dirno " <<
-               sd->index  << ", fileno "<< std::setfill('0') << std::hex <<
-               std::uppercase << std::setw(8) << swapData.swap_filen);
-
-        /* I'm tempted to remove the swapfile here just to be safe,
-         * but there is a bad race condition in the NOVM version if
-         * the swapfile has recently been opened for writing, but
-         * not yet opened for reading.  Because we can't map
-         * swapfiles back to StoreEntrys, we don't know the state
-         * of the entry using that file.  */
-        /* We'll assume the existing entry is valid, probably because
-         * were in a slow rebuild and the the swap file number got taken
-         * and the validation procedure hasn't run. */
-        assert(flags.need_to_validate);
-        ++counts.clashcount;
-        return;
-    } else if (currentEntry() && !disk_entry_newer) {
-        /* key already exists, current entry is newer */
-        /* keep old, ignore new */
-        ++counts.dupcount;
-        return;
-    } else if (currentEntry()) {
-        /* key already exists, this swapfile not being used */
-        /* junk old, load new */
-        undoAdd();
-        --counts.objcount;
-        ++counts.dupcount;
-    } else {
-        /* URL doesnt exist, swapfile not in use */
-        /* load new */
-        (void) 0;
-    }
-
-    ++counts.objcount;
-
-    currentEntry(sd->addDiskRestore(swapData.key,
-                                    swapData.swap_filen,
-                                    swapData.swap_file_sz,
-                                    swapData.expires,
-                                    swapData.timestamp,
-                                    swapData.lastref,
-                                    swapData.lastmod,
-                                    swapData.refcount,
-                                    swapData.flags,
-                                    (int) flags.clean));
-
-    storeDirSwapLog(currentEntry(), SWAP_LOG_ADD);
-}
-
-/// undo the effects of adding an entry in rebuildFromSwapLog()
-void
-RebuildState::undoAdd()
-{
-    StoreEntry *added = currentEntry();
-    assert(added);
-    currentEntry(NULL);
-
-    // TODO: Why bother with these two if we are going to release?!
-    added->expireNow();
-    added->releaseRequest();
-
-    if (added->swap_filen > -1) {
-        UFSSwapDir *sde = dynamic_cast<UFSSwapDir *>(INDEXSD(added->swap_dirn));
-        assert(sde);
-        sde->undoAddDiskRestore(added);
-    }
-
-    added->release();
-}
-
-int
-RebuildState::getNextFile(sfileno * filn_p, int *size)
-{
-    int fd = -1;
-    int dirs_opened = 0;
-    debugs(47, 3, "commonUfsDirGetNextFile: flag=" << flags.init  << ", " <<
-           sd->index  << ": /"<< std::setfill('0') << std::hex <<
-           std::uppercase << std::setw(2) << curlvl1  << "/" << std::setw(2) <<
-           curlvl2);
-
-    if (done)
-        return -2;
-
-    while (fd < 0 && done == 0) {
-        fd = -1;
-
-        if (0 == flags.init) {	/* initialize, open first file */
-            done = 0;
-            curlvl1 = 0;
-            curlvl2 = 0;
-            in_dir = 0;
-            flags.init = 1;
-            assert(Config.cacheSwap.n_configured > 0);
-        }
-
-        if (0 == in_dir) {	/* we need to read in a new directory */
-            snprintf(fullpath, MAXPATHLEN, "%s/%02X/%02X",
-                     sd->path,
-                     curlvl1, curlvl2);
-
-            if (dirs_opened)
-                return -1;
-
-            td = opendir(fullpath);
-
-            ++dirs_opened;
-
-            if (td == NULL) {
-                debugs(47, 1, "commonUfsDirGetNextFile: opendir: " << fullpath << ": " << xstrerror());
-            } else {
-                entry = readdir(td);	/* skip . and .. */
-                entry = readdir(td);
-
-                if (entry == NULL && errno == ENOENT)
-                    debugs(47, 1, "commonUfsDirGetNextFile: directory does not exist!.");
-                debugs(47, 3, "commonUfsDirGetNextFile: Directory " << fullpath);
-            }
-        }
-
-        if (td != NULL && (entry = readdir(td)) != NULL) {
-            ++in_dir;
-
-            if (sscanf(entry->d_name, "%x", &fn) != 1) {
-                debugs(47, 3, "commonUfsDirGetNextFile: invalid " << entry->d_name);
-                continue;
-            }
-
-            if (!UFSSwapDir::FilenoBelongsHere(fn, sd->index, curlvl1, curlvl2)) {
-                debugs(47, 3, "commonUfsDirGetNextFile: "<< std::setfill('0') <<
-                       std::hex << std::uppercase << std::setw(8) << fn  <<
-                       " does not belong in " << std::dec << sd->index  << "/" <<
-                       curlvl1  << "/" << curlvl2);
-
-                continue;
-            }
-
-            if (sd->mapBitTest(fn)) {
-                debugs(47, 3, "commonUfsDirGetNextFile: Locked, continuing with next.");
-                continue;
-            }
-
-            snprintf(fullfilename, MAXPATHLEN, "%s/%s",
-                     fullpath, entry->d_name);
-            debugs(47, 3, "commonUfsDirGetNextFile: Opening " << fullfilename);
-            fd = file_open(fullfilename, O_RDONLY | O_BINARY);
-
-            if (fd < 0)
-                debugs(47, 1, "commonUfsDirGetNextFile: " << fullfilename << ": " << xstrerror());
-            else
-                ++store_open_disk_fd;
-
-            continue;
-        }
-
-        if (td != NULL)
-            closedir(td);
-
-        td = NULL;
-
-        in_dir = 0;
-
-        if (sd->validL2(++curlvl2))
-            continue;
-
-        curlvl2 = 0;
-
-        if (sd->validL1(++curlvl1))
-            continue;
-
-        curlvl1 = 0;
-
-        done = 1;
-    }
-
-    *filn_p = fn;
-    return fd;
-}
-
-bool
-RebuildState::error() const
-{
-    return false;
-}
-
-bool
-RebuildState::isDone() const
-{
-    return _done;
-}
-
-StoreEntry *
-RebuildState::currentItem()
-{
-    return currentEntry();
-}
-
-#if !_USE_INLINE_
-#include "ufscommon.cci"
-#endif

=== removed file 'src/fs/ufs/ufscommon.cci'
--- src/fs/ufs/ufscommon.cci	2009-01-21 03:47:47 +0000
+++ src/fs/ufs/ufscommon.cci	1970-01-01 00:00:00 +0000
@@ -1,34 +0,0 @@
-/*
- * $Id$
- *
- * DEBUG: section 47    Store Directory Routines
- * AUTHOR: Duane Wessels
- *
- * SQUID Web Proxy Cache          http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- *  Squid is the result of efforts by numerous individuals from
- *  the Internet community; see the CONTRIBUTORS file for full
- *  details.   Many organizations have provided support for Squid's
- *  development; see the SPONSORS file for full details.  Squid is
- *  Copyrighted (C) 2001 by the Regents of the University of
- *  California; see the COPYRIGHT file for full details.  Squid
- *  incorporates software developed and/or copyrighted by other
- *  sources; see the CREDITS file for full details.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- */
-

=== removed file 'src/fs/ufs/ufscommon.h'
--- src/fs/ufs/ufscommon.h	2012-07-20 23:11:02 +0000
+++ src/fs/ufs/ufscommon.h	1970-01-01 00:00:00 +0000
@@ -1,425 +0,0 @@
-/*
- * $Id$
- *
- * SQUID Web Proxy Cache          http://www.squid-cache.org/
- * ----------------------------------------------------------
- *
- *  Squid is the result of efforts by numerous individuals from
- *  the Internet community; see the CONTRIBUTORS file for full
- *  details.   Many organizations have provided support for Squid's
- *  development; see the SPONSORS file for full details.  Squid is
- *  Copyrighted (C) 2001 by the Regents of the University of
- *  California; see the COPYRIGHT file for full details.  Squid
- *  incorporates software developed and/or copyrighted by other
- *  sources; see the CREDITS file for full details.
- *
- *  This program is free software; you can redistribute it and/or modify
- *  it under the terms of the GNU General Public License as published by
- *  the Free Software Foundation; either version 2 of the License, or
- *  (at your option) any later version.
- *
- *  This program is distributed in the hope that it will be useful,
- *  but WITHOUT ANY WARRANTY; without even the implied warranty of
- *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *  GNU General Public License for more details.
- *
- *  You should have received a copy of the GNU General Public License
- *  along with this program; if not, write to the Free Software
- *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
- *
- */
-#ifndef SQUID_UFSCOMMON_H
-#define SQUID_UFSCOMMON_H
-
-
-#define DefaultLevelOneDirs	16
-#define DefaultLevelTwoDirs	256
-#define STORE_META_BUFSZ	4096
-
-class UFSStrategy;
-class ConfigOptionVector;
-class DiskIOModule;
-class StoreSearch;
-class FileMap;
-
-#include "SwapDir.h"
-
-/// \ingroup UFS
-class UFSSwapDir : public SwapDir
-{
-
-public:
-    static int IsUFSDir(SwapDir* sd);
-    static int DirClean(int swap_index);
-    static int FilenoBelongsHere(int fn, int F0, int F1, int F2);
-
-    UFSSwapDir(char const *aType, const char *aModuleType);
-    virtual void init();
-    virtual void create();
-    virtual void dump(StoreEntry &) const;
-    ~UFSSwapDir();
-    virtual StoreSearch *search(String const url, HttpRequest *);
-    virtual bool doubleCheck(StoreEntry &);
-    virtual bool unlinkdUseful() const;
-    virtual void unlink(StoreEntry &);
-    virtual void statfs(StoreEntry &)const;
-    virtual void maintain();
-    virtual bool canStore(const StoreEntry &e, int64_t diskSpaceNeeded, int &load) const;
-    virtual void reference(StoreEntry &);
-    virtual bool dereference(StoreEntry &);
-    virtual StoreIOState::Pointer createStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
-    virtual StoreIOState::Pointer openStoreIO(StoreEntry &, StoreIOState::STFNCB *, StoreIOState::STIOCB *, void *);
-    virtual void openLog();
-    virtual void closeLog();
-    virtual int writeCleanStart();
-    virtual void writeCleanDone();
-    virtual void logEntry(const StoreEntry & e, int op) const;
-    virtual void parse(int index, char *path);
-    virtual void reconfigure();
-    virtual int callback();
-    virtual void sync();
-    virtual void swappedOut(const StoreEntry &e);
-    virtual uint64_t currentSize() const { return cur_size; }
-    virtual uint64_t currentCount() const { return n_disk_objects; }
-
-    void unlinkFile(sfileno f);
-    // move down when unlink is a virtual method
-    //protected:
-    UFSStrategy *IO;
-    char *fullPath(sfileno, char *) const;
-    /* temp */
-    void closeTmpSwapLog();
-    FILE *openTmpSwapLog(int *clean_flag, int *zero_flag);
-    char *swapSubDir(int subdirn) const;
-    int mapBitTest(sfileno filn);
-    void mapBitReset(sfileno filn);
-    void mapBitSet(sfileno filn);
-    StoreEntry *addDiskRestore(const cache_key * key,
-                               sfileno file_number,
-                               uint64_t swap_file_sz,
-                               time_t expires,
-                               time_t timestamp,
-                               time_t lastref,
-                               time_t lastmod,
-                               uint32_t refcount,
-                               uint16_t flags,
-                               int clean);
-    /// Undo the effects of UFSSwapDir::addDiskRestore().
-    void undoAddDiskRestore(StoreEntry *e);
-    int validFileno(sfileno filn, int flag) const;
-    int mapBitAllocate();
-    virtual ConfigOption *getOptionTree() const;
-
-    void *fsdata;
-
-    bool validL2(int) const;
-    bool validL1(int) const;
-
-    void replacementAdd(StoreEntry *e);
-    void replacementRemove(StoreEntry *e);
-
-protected:
-    FileMap *map;
-    int suggest;
-    int l1;
-    int l2;
-
-private:
-    void parseSizeL1L2();
-    static int NumberOfUFSDirs;
-    static int * UFSDirToGlobalDirMapping;
-    bool pathIsDirectory(const char *path)const;
-    int swaplog_fd;
-    static EVH CleanEvent;
-    bool verifyCacheDirs();
-    void rebuild();
-    int createDirectory(const char *path, int);
-    void createSwapSubDirs();
-    void dumpEntry(StoreEntry &) const;
-    char *logFile(char const *ext = NULL)const;
-    void changeIO(DiskIOModule *);
-    bool optionIOParse(char const *option, const char *value, int reconfiguring);
-    void optionIODump(StoreEntry * e) const;
-    mutable ConfigOptionVector *currentIOOptions;
-    char const *ioType;
-    uint64_t cur_size; ///< currently used space in the storage area
-    uint64_t n_disk_objects; ///< total number of objects stored
-};
-
-#include "RefCount.h"
-#include "DiskIO/IORequestor.h"
-
-/**
- * UFS dir specific IO calls
- *
- \todo This should be whittled away.
- *     DiskIOModule should be providing the entire needed API.
- */
-
-class DiskIOStrategy;
-
-class DiskFile;
-
-/// \ingroup UFS
-class UFSStrategy
-{
-
-public:
-    UFSStrategy (DiskIOStrategy *);
-    virtual ~UFSStrategy ();
-    /* Not implemented */
-    UFSStrategy (UFSStrategy const &);
-    UFSStrategy &operator=(UFSStrategy const &);
-
-    virtual bool shedLoad();
-
-    virtual int load();
-
-    StoreIOState::Pointer createState(SwapDir *SD, StoreEntry *e, StoreIOState::STIOCB * callback, void *callback_data) const;
-    /* UFS specific */
-    virtual RefCount<DiskFile> newFile (char const *path);
-    StoreIOState::Pointer open(SwapDir *, StoreEntry *, StoreIOState::STFNCB *,
-                               StoreIOState::STIOCB *, void *);
-    StoreIOState::Pointer create(SwapDir *, StoreEntry *, StoreIOState::STFNCB *,
-                                 StoreIOState::STIOCB *, void *);
-
-    virtual void unlinkFile (char const *);
-    virtual void sync();
-
-    virtual int callback();
-
-    /** Init per-instance logic */
-    virtual void init();
-
-    /** cachemgr output on the IO instance stats */
-    virtual void statfs(StoreEntry & sentry)const;
-
-    /** The io strategy in use */
-    DiskIOStrategy *io;
-protected:
-
-    friend class UFSSwapDir;
-};
-
-/** Common ufs-store-dir logic */
-
-class ReadRequest;
-
-/// \ingroup UFS
-class UFSStoreState : public StoreIOState, public IORequestor
-{
-
-public:
-    void * operator new (size_t);
-    void operator delete (void *);
-    UFSStoreState(SwapDir * SD, StoreEntry * anEntry, STIOCB * callback_, void *callback_data_);
-    ~UFSStoreState();
-    virtual void close(int how);
-    virtual void closeCompleted();
-    // protected:
-    virtual void ioCompletedNotification();
-    virtual void readCompleted(const char *buf, int len, int errflag, RefCount<ReadRequest>);
-    virtual void writeCompleted(int errflag, size_t len, RefCount<WriteRequest>);
-    RefCount<DiskFile> theFile;
-    bool opening;
-    bool creating;
-    bool closing;
-    bool reading;
-    bool writing;
-    void read_(char *buf, size_t size, off_t offset, STRCB * callback, void *callback_data);
-    void write(char const *buf, size_t size, off_t offset, FREE * free_func);
-
-protected:
-    virtual void doCloseCallback (int errflag);
-
-    class _queued_read
-    {
-
-    public:
-        MEMPROXY_CLASS(UFSStoreState::_queued_read);
-        char *buf;
-        size_t size;
-        off_t offset;
-        STRCB *callback;
-        void *callback_data;
-
-    };
-
-    class _queued_write
-    {
-
-    public:
-        MEMPROXY_CLASS(UFSStoreState::_queued_write);
-        char const *buf;
-        size_t size;
-        off_t offset;
-        FREE *free_func;
-
-    };
-
-    /** \todo These should be in the IO strategy */
-
-    struct {
-        /**
-         * DPW 2006-05-24
-         * the write_draining flag is used to avoid recursion inside
-         * the UFSStoreState::drainWriteQueue() method.
-         */
-        bool write_draining;
-        /**
-         * DPW 2006-05-24
-         * The try_closing flag is set by UFSStoreState::tryClosing()
-         * when UFSStoreState wants to close the file, but cannot
-         * because of pending I/Os.  If set, UFSStoreState will
-         * try to close again in the I/O callbacks.
-         */
-        bool try_closing;
-    } flags;
-    link_list *pending_reads;
-    link_list *pending_writes;
-    void queueRead(char *, size_t, off_t, STRCB *, void *);
-    void queueWrite(char const *, size_t, off_t, FREE *);
-    bool kickReadQueue();
-    void drainWriteQueue();
-    void tryClosing();
-    char *read_buf;
-
-private:
-    CBDATA_CLASS(UFSStoreState);
-    void openDone();
-    void freePending();
-    void doWrite();
-};
-
-MEMPROXY_CLASS_INLINE(UFSStoreState::_queued_read);
-MEMPROXY_CLASS_INLINE(UFSStoreState::_queued_write);
-
-
-#include "StoreSearch.h"
-
-/// \ingroup UFS
-class StoreSearchUFS : public StoreSearch
-{
-
-public:
-    StoreSearchUFS(RefCount<UFSSwapDir> sd);
-    StoreSearchUFS(StoreSearchUFS const &);
-    virtual ~StoreSearchUFS();
-
-    /** \todo Iterator API - garh, wrong place */
-    /**
-     * callback the client when a new StoreEntry is available
-     * or an error occurs
-     */
-    virtual void next(void (callback)(void *cbdata), void *cbdata);
-
-    /**
-     \retval true if a new StoreEntry is immediately available
-     \retval false if a new StoreEntry is NOT immediately available
-     */
-    virtual bool next();
-
-    virtual bool error() const;
-    virtual bool isDone() const;
-    virtual StoreEntry *currentItem();
-
-    RefCount<UFSSwapDir> sd;
-    RemovalPolicyWalker *walker;
-
-private:
-    CBDATA_CLASS2(StoreSearchUFS);
-    /// \bug (callback) should be hidden behind a proper human readable name
-    void (callback)(void *cbdata);
-    void *cbdata;
-    StoreEntry * current;
-    bool _done;
-};
-
-
-class StoreSwapLogData;
-
-/// \ingroup UFS
-class UFSSwapLogParser
-{
-
-public:
-    FILE *log;
-    int log_entries;
-    int record_size;
-
-    UFSSwapLogParser(FILE *fp):log(fp),log_entries(-1), record_size(0) {
-    }
-    virtual ~UFSSwapLogParser() {};
-
-    static UFSSwapLogParser *GetUFSSwapLogParser(FILE *fp);
-
-    virtual bool ReadRecord(StoreSwapLogData &swapData) = 0;
-    int SwapLogEntries();
-    void Close() {
-        if (log) {
-            fclose(log);
-            log = NULL;
-        }
-    }
-};
-
-
-/// \ingroup UFS
-class RebuildState : public RefCountable
-{
-
-public:
-    static EVH RebuildStep;
-
-    RebuildState(RefCount<UFSSwapDir> sd);
-    ~RebuildState();
-
-    virtual bool error() const;
-    virtual bool isDone() const;
-    virtual StoreEntry *currentItem();
-
-    RefCount<UFSSwapDir> sd;
-    int n_read;
-    /*    FILE *log;*/
-    UFSSwapLogParser *LogParser;
-    int curlvl1;
-    int curlvl2;
-
-    struct {
-        unsigned int need_to_validate:1;
-        unsigned int clean:1;
-        unsigned int init:1;
-    } flags;
-    int in_dir;
-    int done;
-    int fn;
-
-    dirent_t *entry;
-    DIR *td;
-    char fullpath[MAXPATHLEN];
-    char fullfilename[MAXPATHLEN];
-
-    struct _store_rebuild_data counts;
-
-private:
-    CBDATA_CLASS2(RebuildState);
-    void rebuildFromDirectory();
-    void rebuildFromSwapLog();
-    void rebuildStep();
-    void undoAdd();
-    int getNextFile(sfileno *, int *size);
-    StoreEntry *currentEntry() const;
-    void currentEntry(StoreEntry *);
-    StoreEntry *e;
-    bool fromLog;
-    bool _done;
-    /// \bug (callback) should be hidden behind a proper human readable name
-    void (callback)(void *cbdata);
-    void *cbdata;
-};
-
-#if _USE_INLINE_
-#include "ufscommon.cci"
-#endif
-
-#endif /* SQUID_UFSCOMMON_H */

=== modified file 'src/gopher.cc'
--- src/gopher.cc	2012-07-23 15:34:12 +0000
+++ src/gopher.cc	2012-08-02 21:10:18 +0000
@@ -454,7 +454,7 @@
             llen = left;
         }
         if (gopherState->len + llen >= TEMP_BUF_SIZE) {
-            debugs(10, 1, "GopherHTML: Buffer overflow. Lost some data on URL: " << entry->url()  );
+            debugs(10, DBG_IMPORTANT, "GopherHTML: Buffer overflow. Lost some data on URL: " << entry->url()  );
             llen = TEMP_BUF_SIZE - gopherState->len - 1;
         }
         if (!lpos) {
@@ -796,7 +796,7 @@
     }
 
     if (flag != COMM_OK) {
-        debugs(50, 1, "gopherReadReply: error reading: " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "gopherReadReply: error reading: " << xstrerror());
 
         if (ignoreErrno(xerrno)) {
             AsyncCall::Pointer call = commCbCall(5,4, "gopherReadReply",

=== modified file 'src/helper.cc'
--- src/helper.cc	2012-07-23 15:34:12 +0000
+++ src/helper.cc	2012-08-02 21:18:43 +0000
@@ -172,10 +172,10 @@
     /* figure out how many new child are actually needed. */
     int need_new = hlp->childs.needNew();
 
-    debugs(84, 1, "helperOpenServers: Starting " << need_new << "/" << hlp->childs.n_max << " '" << shortname << "' processes");
+    debugs(84, DBG_IMPORTANT, "helperOpenServers: Starting " << need_new << "/" << hlp->childs.n_max << " '" << shortname << "' processes");
 
     if (need_new < 1) {
-        debugs(84, 1, "helperOpenServers: No '" << shortname << "' processes needed.");
+        debugs(84, DBG_IMPORTANT, "helperOpenServers: No '" << shortname << "' processes needed.");
     }
 
     procname = (char *)xmalloc(strlen(shortname) + 3);
@@ -208,7 +208,7 @@
                         &hIpc);
 
         if (pid < 0) {
-            debugs(84, 1, "WARNING: Cannot run '" << progname << "' process.");
+            debugs(84, DBG_IMPORTANT, "WARNING: Cannot run '" << progname << "' process.");
             continue;
         }
 
@@ -277,7 +277,7 @@
         return;
 
     if (hlp->childs.concurrency)
-        debugs(84, 0, "ERROR: concurrency= is not yet supported for stateful helpers ('" << hlp->cmdline << "')");
+        debugs(84, DBG_CRITICAL, "ERROR: concurrency= is not yet supported for stateful helpers ('" << hlp->cmdline << "')");
 
     char *progname = hlp->cmdline->key;
 
@@ -290,10 +290,10 @@
     /* figure out haw mant new helpers are needed. */
     int need_new = hlp->childs.needNew();
 
-    debugs(84, 1, "helperOpenServers: Starting " << need_new << "/" << hlp->childs.n_max << " '" << shortname << "' processes");
+    debugs(84, DBG_IMPORTANT, "helperOpenServers: Starting " << need_new << "/" << hlp->childs.n_max << " '" << shortname << "' processes");
 
     if (need_new < 1) {
-        debugs(84, 1, "helperStatefulOpenServers: No '" << shortname << "' processes needed.");
+        debugs(84, DBG_IMPORTANT, "helperStatefulOpenServers: No '" << shortname << "' processes needed.");
     }
 
     char *procname = (char *)xmalloc(strlen(shortname) + 3);
@@ -328,7 +328,7 @@
                               &hIpc);
 
         if (pid < 0) {
-            debugs(84, 1, "WARNING: Cannot run '" << progname << "' process.");
+            debugs(84, DBG_IMPORTANT, "WARNING: Cannot run '" << progname << "' process.");
             continue;
         }
 
@@ -680,7 +680,7 @@
     /* note, don't free id_name, it probably points to static memory */
 
     if (queue.head)
-        debugs(84, 0, "WARNING: freeing " << id_name << " helper with " << stats.queue_size << " requests queued");
+        debugs(84, DBG_CRITICAL, "WARNING: freeing " << id_name << " helper with " << stats.queue_size << " requests queued");
 }
 
 /* ====================================================================== */
@@ -725,12 +725,12 @@
         debugs(84, DBG_CRITICAL, "WARNING: " << hlp->id_name << " #" << srv->index + 1 << " exited");
 
         if (hlp->childs.needNew() > 0) {
-            debugs(80, 1, "Too few " << hlp->id_name << " processes are running (need " << hlp->childs.needNew() << "/" << hlp->childs.n_max << ")");
+            debugs(80, DBG_IMPORTANT, "Too few " << hlp->id_name << " processes are running (need " << hlp->childs.needNew() << "/" << hlp->childs.n_max << ")");
 
             if (hlp->childs.n_active < hlp->childs.n_startup && hlp->last_restart > squid_curtime - 30)
                 fatalf("The %s helpers are crashing too rapidly, need help!\n", hlp->id_name);
 
-            debugs(80, 1, "Starting new helpers");
+            debugs(80, DBG_IMPORTANT, "Starting new helpers");
             helperOpenServers(hlp);
         }
     }
@@ -783,15 +783,15 @@
     if (!srv->flags.shutdown) {
         assert( hlp->childs.n_active > 0);
         -- hlp->childs.n_active;
-        debugs(84, 0, "WARNING: " << hlp->id_name << " #" << srv->index + 1 << " exited");
+        debugs(84, DBG_CRITICAL, "WARNING: " << hlp->id_name << " #" << srv->index + 1 << " exited");
 
         if (hlp->childs.needNew() > 0) {
-            debugs(80, 1, "Too few " << hlp->id_name << " processes are running (need " << hlp->childs.needNew() << "/" << hlp->childs.n_max << ")");
+            debugs(80, DBG_IMPORTANT, "Too few " << hlp->id_name << " processes are running (need " << hlp->childs.needNew() << "/" << hlp->childs.n_max << ")");
 
             if (hlp->childs.n_active < hlp->childs.n_startup && hlp->last_restart > squid_curtime - 30)
                 fatalf("The %s helpers are crashing too rapidly, need help!\n", hlp->id_name);
 
-            debugs(80, 1, "Starting new helpers");
+            debugs(80, DBG_IMPORTANT, "Starting new helpers");
             helperStatefulOpenServers(hlp);
         }
     }
@@ -845,7 +845,7 @@
 
         helperRequestFree(r);
     } else {
-        debugs(84, 1, "helperHandleRead: unexpected reply on channel " <<
+        debugs(84, DBG_IMPORTANT, "helperHandleRead: unexpected reply on channel " <<
                request_number << " from " << hlp->id_name << " #" << srv->index + 1 <<
                " '" << srv->rbuf << "'");
     }
@@ -890,7 +890,7 @@
 
     if (!srv->stats.pending) {
         /* someone spoke without being spoken to */
-        debugs(84, 1, "helperHandleRead: unexpected read from " <<
+        debugs(84, DBG_IMPORTANT, "helperHandleRead: unexpected read from " <<
                hlp->id_name << " #" << srv->index + 1 << ", " << (int)len <<
                " bytes '" << srv->rbuf << "'");
 
@@ -980,7 +980,7 @@
 
     if (r == NULL) {
         /* someone spoke without being spoken to */
-        debugs(84, 1, "helperStatefulHandleRead: unexpected read from " <<
+        debugs(84, DBG_IMPORTANT, "helperStatefulHandleRead: unexpected read from " <<
                hlp->id_name << " #" << srv->index + 1 << ", " << (int)len <<
                " bytes '" << srv->rbuf << "'");
 
@@ -1000,7 +1000,7 @@
         if (r && cbdataReferenceValid(r->data)) {
             r->callback(r->data, srv, srv->rbuf);
         } else {
-            debugs(84, 1, "StatefulHandleRead: no callback data registered");
+            debugs(84, DBG_IMPORTANT, "StatefulHandleRead: no callback data registered");
             called = 0;
         }
 
@@ -1058,7 +1058,7 @@
 
     /* do this first so idle=N has a chance to grow the child pool before it hits critical. */
     if (hlp->childs.needNew() > 0) {
-        debugs(84, 0, "Starting new " << hlp->id_name << " helpers...");
+        debugs(84, DBG_CRITICAL, "Starting new " << hlp->id_name << " helpers...");
         helperOpenServers(hlp);
         return;
     }
@@ -1074,9 +1074,9 @@
 
     hlp->last_queue_warn = squid_curtime;
 
-    debugs(84, 0, "WARNING: All " << hlp->childs.n_active << "/" << hlp->childs.n_max << " " << hlp->id_name << " processes are busy.");
-    debugs(84, 0, "WARNING: " << hlp->stats.queue_size << " pending requests queued");
-    debugs(84, 0, "WARNING: Consider increasing the number of " << hlp->id_name << " processes in your config file.");
+    debugs(84, DBG_CRITICAL, "WARNING: All " << hlp->childs.n_active << "/" << hlp->childs.n_max << " " << hlp->id_name << " processes are busy.");
+    debugs(84, DBG_CRITICAL, "WARNING: " << hlp->stats.queue_size << " pending requests queued");
+    debugs(84, DBG_CRITICAL, "WARNING: Consider increasing the number of " << hlp->id_name << " processes in your config file.");
 
     if (hlp->stats.queue_size > (int)hlp->childs.n_running * 2)
         fatalf("Too many queued %s requests", hlp->id_name);
@@ -1091,7 +1091,7 @@
 
     /* do this first so idle=N has a chance to grow the child pool before it hits critical. */
     if (hlp->childs.needNew() > 0) {
-        debugs(84, 0, "Starting new " << hlp->id_name << " helpers...");
+        debugs(84, DBG_CRITICAL, "Starting new " << hlp->id_name << " helpers...");
         helperStatefulOpenServers(hlp);
         return;
     }
@@ -1110,9 +1110,9 @@
 
     hlp->last_queue_warn = squid_curtime;
 
-    debugs(84, 0, "WARNING: All " << hlp->childs.n_active << "/" << hlp->childs.n_max << " " << hlp->id_name << " processes are busy.");
-    debugs(84, 0, "WARNING: " << hlp->stats.queue_size << " pending requests queued");
-    debugs(84, 0, "WARNING: Consider increasing the number of " << hlp->id_name << " processes in your config file.");
+    debugs(84, DBG_CRITICAL, "WARNING: All " << hlp->childs.n_active << "/" << hlp->childs.n_max << " " << hlp->id_name << " processes are busy.");
+    debugs(84, DBG_CRITICAL, "WARNING: " << hlp->stats.queue_size << " pending requests queued");
+    debugs(84, DBG_CRITICAL, "WARNING: Consider increasing the number of " << hlp->id_name << " processes in your config file.");
 }
 
 static helper_request *
@@ -1240,7 +1240,7 @@
 
     if (flag != COMM_OK) {
         /* Helper server has crashed */
-        debugs(84, 0, "helperDispatch: Helper " << srv->parent->id_name << " #" << srv->index + 1 << " has crashed");
+        debugs(84, DBG_CRITICAL, "helperDispatch: Helper " << srv->parent->id_name << " #" << srv->index + 1 << " has crashed");
         return;
     }
 
@@ -1262,7 +1262,7 @@
     unsigned int slot;
 
     if (!cbdataReferenceValid(r->data)) {
-        debugs(84, 1, "helperDispatch: invalid callback data");
+        debugs(84, DBG_IMPORTANT, "helperDispatch: invalid callback data");
         helperRequestFree(r);
         return;
     }
@@ -1317,7 +1317,7 @@
     statefulhelper *hlp = srv->parent;
 
     if (!cbdataReferenceValid(r->data)) {
-        debugs(84, 1, "helperStatefulDispatch: invalid callback data");
+        debugs(84, DBG_IMPORTANT, "helperStatefulDispatch: invalid callback data");
         helperStatefulRequestFree(r);
         helperStatefulReleaseServer(srv);
         return;

=== modified file 'src/http.cc'
--- src/http.cc	2012-07-23 07:02:06 +0000
+++ src/http.cc	2012-08-02 21:10:18 +0000
@@ -609,7 +609,7 @@
 
         if (Config.onoff.detect_broken_server_pconns
                 && reply->bodySize(request->method) == -1 && !flags.chunked) {
-            debugs(11, 1, "keepaliveAccounting: Impossible keep-alive header from '" << entry->url() << "'" );
+            debugs(11, DBG_IMPORTANT, "keepaliveAccounting: Impossible keep-alive header from '" << entry->url() << "'" );
             // debugs(11, 2, "GOT HTTP REPLY HDR:\n---------\n" << readBuf->content() << "\n----------" );
             flags.keepalive_broken = 1;
         }
@@ -1682,7 +1682,7 @@
             static int warnedCount = 0;
             if (warnedCount++ < 100) {
                 const char *url = entry ? entry->url() : urlCanonical(request);
-                debugs(11, 1, "Warning: likely forwarding loop with " << url);
+                debugs(11, DBG_IMPORTANT, "Warning: likely forwarding loop with " << url);
             }
         }
 
@@ -2257,7 +2257,7 @@
         // XXX: we should check this condition in other callbacks then!
         // TODO: Check whether this can actually happen: We should unsubscribe
         // as a body consumer when the above condition(s) are detected.
-        debugs(11, 1, HERE << "Transaction aborted while reading HTTP body");
+        debugs(11, DBG_IMPORTANT, HERE << "Transaction aborted while reading HTTP body");
         return;
     }
 
@@ -2268,7 +2268,7 @@
 
         if (flags.headers_parsed && !flags.abuse_detected) {
             flags.abuse_detected = 1;
-            debugs(11, 1, "http handleMoreRequestBodyAvailable: Likely proxy abuse detected '" << request->client_addr << "' -> '" << entry->url() << "'" );
+            debugs(11, DBG_IMPORTANT, "http handleMoreRequestBodyAvailable: Likely proxy abuse detected '" << request->client_addr << "' -> '" << entry->url() << "'" );
 
             if (virginReply()->sline.status == HTTP_INVALID_HEADER) {
                 serverConnection->close();

=== modified file 'src/icmp/Icmp4.cc'
--- src/icmp/Icmp4.cc	2012-07-20 12:44:39 +0000
+++ src/icmp/Icmp4.cc	2012-08-02 21:18:43 +0000
@@ -79,12 +79,12 @@
     icmp_sock = socket(PF_INET, SOCK_RAW, IPPROTO_ICMP);
 
     if (icmp_sock < 0) {
-        debugs(50, 0, HERE << " icmp_sock: " << xstrerror());
+        debugs(50, DBG_CRITICAL, HERE << " icmp_sock: " << xstrerror());
         return -1;
     }
 
     icmp_ident = getpid() & 0xffff;
-    debugs(42, 1, "pinger: ICMP socket opened.");
+    debugs(42, DBG_IMPORTANT, "pinger: ICMP socket opened.");
 
     return icmp_sock;
 }
@@ -152,7 +152,7 @@
                S->ai_addrlen);
 
     if (x < 0) {
-        debugs(42, 1, HERE << "Error sending to ICMP packet to " << to << ". ERR: " << xstrerror());
+        debugs(42, DBG_IMPORTANT, HERE << "Error sending to ICMP packet to " << to << ". ERR: " << xstrerror());
     }
 
     Log(to, ' ', NULL, 0, 0);
@@ -172,7 +172,7 @@
     static pingerReplyData preply;
 
     if (icmp_sock < 0) {
-        debugs(42, 0, HERE << "No socket! Recv() should not be called.");
+        debugs(42, DBG_CRITICAL, HERE << "No socket! Recv() should not be called.");
         return;
     }
 

=== modified file 'src/icmp/Icmp6.cc'
--- src/icmp/Icmp6.cc	2012-07-20 12:44:39 +0000
+++ src/icmp/Icmp6.cc	2012-08-02 21:18:43 +0000
@@ -119,12 +119,12 @@
     icmp_sock = socket(PF_INET6, SOCK_RAW, IPPROTO_ICMPV6);
 
     if (icmp_sock < 0) {
-        debugs(50, 0, HERE << " icmp_sock: " << xstrerror());
+        debugs(50, DBG_CRITICAL, HERE << " icmp_sock: " << xstrerror());
         return -1;
     }
 
     icmp_ident = getpid() & 0xffff;
-    debugs(42, 1, "pinger: ICMPv6 socket opened");
+    debugs(42, DBG_IMPORTANT, "pinger: ICMPv6 socket opened");
 
     return icmp_sock;
 }
@@ -197,7 +197,7 @@
                S->ai_addrlen);
 
     if (x < 0) {
-        debugs(42, 1, HERE << "Error sending to ICMPv6 packet to " << to << ". ERR: " << xstrerror());
+        debugs(42, DBG_IMPORTANT, HERE << "Error sending to ICMPv6 packet to " << to << ". ERR: " << xstrerror());
     }
     debugs(42,9, HERE << "x=" << x);
 
@@ -220,7 +220,7 @@
     static pingerReplyData preply;
 
     if (icmp_sock < 0) {
-        debugs(42,0, HERE << "dropping ICMPv6 read. No socket!?");
+        debugs(42, DBG_CRITICAL, HERE << "dropping ICMPv6 read. No socket!?");
         return;
     }
 
@@ -271,7 +271,7 @@
         ip = (struct ip6_hdr *) pkt;
         pkt += sizeof(ip6_hdr);
 
-    debugs(42,0, HERE << "ip6_nxt=" << ip->ip6_nxt <<
+    debugs(42, DBG_CRITICAL, HERE << "ip6_nxt=" << ip->ip6_nxt <<
     		", ip6_plen=" << ip->ip6_plen <<
     		", ip6_hlim=" << ip->ip6_hlim <<
     		", ip6_hops=" << ip->ip6_hops	<<

=== modified file 'src/icmp/IcmpPinger.cc'
--- src/icmp/IcmpPinger.cc	2012-01-20 18:55:04 +0000
+++ src/icmp/IcmpPinger.cc	2012-08-02 21:18:43 +0000
@@ -88,7 +88,7 @@
 
     if (x < (int)sizeof(wpi)) {
         getCurrentTime();
-        debugs(42, 0, HERE << "read: FD 0: " << xstrerror());
+        debugs(42, DBG_CRITICAL, HERE << "read: FD 0: " << xstrerror());
         write(1, "ERR\n", 4);
         return -1;
     }
@@ -100,7 +100,7 @@
 
     if (x < (int)sizeof(PS)) {
         getCurrentTime();
-        debugs(42, 0, HERE << "read: FD 0: " << xstrerror());
+        debugs(42, DBG_CRITICAL, HERE << "read: FD 0: " << xstrerror());
         write(1, "ERR\n", 4);
         return -1;
     }
@@ -111,7 +111,7 @@
 
     if (icmp_sock == -1) {
         getCurrentTime();
-        debugs(42, 0, HERE << "WSASocket: " << xstrerror());
+        debugs(42, DBG_CRITICAL, HERE << "WSASocket: " << xstrerror());
         write(1, "ERR\n", 4);
         return -1;
     }
@@ -120,7 +120,7 @@
 
     if (SOCKET_ERROR == x) {
         getCurrentTime();
-        debugs(42, 0, HERE << "connect: " << xstrerror());
+        debugs(42, DBG_CRITICAL, HERE << "connect: " << xstrerror());
         write(1, "ERR\n", 4);
         return -1;
     }
@@ -130,19 +130,19 @@
     x = recv(icmp_sock, (void *) buf, sizeof(buf), 0);
 
     if (x < 3) {
-        debugs(42, 0, HERE << "recv: " << xstrerror());
+        debugs(42, DBG_CRITICAL, HERE << "recv: " << xstrerror());
         return -1;
     }
 
     x = send(icmp_sock, (const void *) buf, strlen(buf), 0);
 
     if (x < 3 || strncmp("OK\n", buf, 3)) {
-        debugs(42, 0, HERE << "recv: " << xstrerror());
+        debugs(42, DBG_CRITICAL, HERE << "recv: " << xstrerror());
         return -1;
     }
 
     getCurrentTime();
-    debugs(42, 1, "pinger: Squid socket opened");
+    debugs(42, DBG_IMPORTANT, "pinger: Squid socket opened");
 
     /* windows uses a socket stream as a dual-direction channel */
     socket_to_squid = icmp_sock;
@@ -185,14 +185,14 @@
     n = recv(socket_from_squid, &pecho, sizeof(pecho), 0);
 
     if (n < 0) {
-        debugs(42, 1, "Pinger exiting.");
+        debugs(42, DBG_IMPORTANT, "Pinger exiting.");
         Close();
         exit(1);
     }
 
     if (0 == n) {
         /* EOF indicator */
-        debugs(42, 0, HERE << "EOF encountered. Pinger exiting.\n");
+        debugs(42, DBG_CRITICAL, HERE << "EOF encountered. Pinger exiting.\n");
         errno = 0;
         Close();
         exit(1);
@@ -223,7 +223,7 @@
                        pecho.payload,
                        pecho.psize);
     } else {
-        debugs(42, 1, HERE << " IP has unknown Type. " << pecho.to );
+        debugs(42, DBG_IMPORTANT, HERE << " IP has unknown Type. " << pecho.to );
     }
 }
 
@@ -233,7 +233,7 @@
     debugs(42, 2, HERE << "return result to squid. len=" << len);
 
     if (send(socket_to_squid, &preply, len, 0) < 0) {
-        debugs(42, 0, "pinger: FATAL error on send: " << xstrerror());
+        debugs(42, DBG_CRITICAL, "pinger: FATAL error on send: " << xstrerror());
         Close();
         exit(1);
     }

=== modified file 'src/icmp/IcmpSquid.cc'
--- src/icmp/IcmpSquid.cc	2012-01-20 18:55:04 +0000
+++ src/icmp/IcmpSquid.cc	2012-08-02 21:18:43 +0000
@@ -115,7 +115,7 @@
     x = comm_udp_send(icmp_sock, (char *)&pecho, slen, 0);
 
     if (x < 0) {
-        debugs(37, 1, HERE << "send: " << xstrerror());
+        debugs(37, DBG_IMPORTANT, HERE << "send: " << xstrerror());
 
         /** \li  If the send results in ECONNREFUSED or EPIPE errors from helper, will cleanly shutdown the module. */
         /** \todo This should try restarting the helper a few times?? before giving up? */
@@ -125,7 +125,7 @@
         }
         /** All other send errors are ignored. */
     } else if (x != slen) {
-        debugs(37, 1, HERE << "Wrote " << x << " of " << slen << " bytes");
+        debugs(37, DBG_IMPORTANT, HERE << "Wrote " << x << " of " << slen << " bytes");
     }
 }
 
@@ -153,7 +153,7 @@
                       0);
 
     if (n < 0 && EAGAIN != errno) {
-        debugs(37, 1, HERE << "recv: " << xstrerror());
+        debugs(37, DBG_IMPORTANT, HERE << "recv: " << xstrerror());
 
         if (errno == ECONNREFUSED)
             Close();
@@ -190,7 +190,7 @@
         break;
 
     default:
-        debugs(37, 1, HERE << "Bad opcode: " << preply.opcode << " from " << F);
+        debugs(37, DBG_IMPORTANT, HERE << "Bad opcode: " << preply.opcode << " from " << F);
         break;
     }
 }
@@ -252,7 +252,7 @@
 
     commUnsetFdTimeout(icmp_sock);
 
-    debugs(37, 1, HERE << "Pinger socket opened on FD " << icmp_sock);
+    debugs(37, DBG_IMPORTANT, HERE << "Pinger socket opened on FD " << icmp_sock);
 
     /* Tests the pinger immediately using localhost */
     if (Ip::EnableIpv6)
@@ -279,7 +279,7 @@
     if (icmp_sock < 0)
         return;
 
-    debugs(37, 1, HERE << "Closing Pinger socket on FD " << icmp_sock);
+    debugs(37, DBG_IMPORTANT, HERE << "Closing Pinger socket on FD " << icmp_sock);
 
 #if _SQUID_MSWIN_
 
@@ -294,7 +294,7 @@
     if (hIpc) {
         if (WaitForSingleObject(hIpc, 12000) != WAIT_OBJECT_0) {
             getCurrentTime();
-            debugs(37, 0, HERE << "WARNING: (pinger," << pid << ") didn't exit in 12 seconds");
+            debugs(37, DBG_CRITICAL, HERE << "WARNING: (pinger," << pid << ") didn't exit in 12 seconds");
         }
 
         CloseHandle(hIpc);

=== modified file 'src/icmp/net_db.cc'
--- src/icmp/net_db.cc	2012-07-23 15:34:12 +0000
+++ src/icmp/net_db.cc	2012-08-02 21:18:43 +0000
@@ -307,7 +307,7 @@
         x = (net_db_name *) hash_lookup(host_table, hostname);
 
         if (x == NULL) {
-            debugs(38, 1, "netdbSendPing: net_db_name list bug: " << hostname << " not found");
+            debugs(38, DBG_IMPORTANT, "netdbSendPing: net_db_name list bug: " << hostname << " not found");
             xfree(hostname);
             return;
         }
@@ -482,7 +482,7 @@
     lf = logfileOpen(Config.netdbFilename, 4096, 0);
 
     if (NULL == lf) {
-        debugs(50, 1, "netdbSaveState: " << Config.netdbFilename << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "netdbSaveState: " << Config.netdbFilename << ": " << xstrerror());
         return;
     }
 
@@ -514,7 +514,7 @@
 
     logfileClose(lf);
     getCurrentTime();
-    debugs(38, 1, "NETDB state saved; " <<
+    debugs(38, DBG_IMPORTANT, "NETDB state saved; " <<
            count << " entries, " <<
            tvSubMsec(start, current_time) << " msec" );
     eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600.0, 1);
@@ -637,7 +637,7 @@
 
     xfree(buf);
     getCurrentTime();
-    debugs(38, 1, "NETDB state reloaded; " <<
+    debugs(38, DBG_IMPORTANT, "NETDB state reloaded; " <<
            count << " entries, " <<
            tvSubMsec(start, current_time) << " msec" );
 }
@@ -799,7 +799,7 @@
                 break;
 
             default:
-                debugs(38, 1, "netdbExchangeHandleReply: corrupt data, aborting");
+                debugs(38, DBG_IMPORTANT, "netdbExchangeHandleReply: corrupt data, aborting");
                 netdbExchangeDone(ex);
                 return;
             }
@@ -1024,7 +1024,7 @@
     }
 
     if (i != memInUse(MEM_NETDBENTRY))
-        debugs(38, 0, "WARNING: netdb_addrs count off, found " << i <<
+        debugs(38, DBG_CRITICAL, "WARNING: netdb_addrs count off, found " << i <<
                ", expected " << memInUse(MEM_NETDBENTRY));
 
     qsort((char *) list,
@@ -1318,7 +1318,7 @@
     ex->r = HttpRequest::CreateFromUrl(uri);
 
     if (NULL == ex->r) {
-        debugs(38, 1, "netdbExchangeStart: Bad URI " << uri);
+        debugs(38, DBG_IMPORTANT, "netdbExchangeStart: Bad URI " << uri);
         return;
     }
 

=== modified file 'src/icmp/pinger.cc'
--- src/icmp/pinger.cc	2012-01-20 18:55:04 +0000
+++ src/icmp/pinger.cc	2012-08-02 21:18:43 +0000
@@ -150,30 +150,30 @@
 
     _db_init(NULL, debug_args);
 
-    debugs(42, 0, "pinger: Initialising ICMP pinger ...");
+    debugs(42, DBG_CRITICAL, "pinger: Initialising ICMP pinger ...");
 
     icmp4_worker = icmp4.Open();
     if (icmp4_worker < 0) {
-        debugs(42, 0, "pinger: Unable to start ICMP pinger.");
+        debugs(42, DBG_CRITICAL, "pinger: Unable to start ICMP pinger.");
     }
     max_fd = max(max_fd, icmp4_worker);
 
 #if USE_IPV6
     icmp6_worker = icmp6.Open();
     if (icmp6_worker <0 ) {
-        debugs(42, 0, "pinger: Unable to start ICMPv6 pinger.");
+        debugs(42, DBG_CRITICAL, "pinger: Unable to start ICMPv6 pinger.");
     }
     max_fd = max(max_fd, icmp6_worker);
 #endif
 
     /** abort if neither worker could open a socket. */
     if (icmp4_worker < 0 && icmp6_worker < 0) {
-        debugs(42, 0, "FATAL: pinger: Unable to open any ICMP sockets.");
+        debugs(42, DBG_CRITICAL, "FATAL: pinger: Unable to open any ICMP sockets.");
         exit(1);
     }
 
     if ( (squid_link = control.Open()) < 0) {
-        debugs(42, 0, "FATAL: pinger: Unable to setup Pinger control sockets.");
+        debugs(42, DBG_CRITICAL, "FATAL: pinger: Unable to setup Pinger control sockets.");
         icmp4.Close();
         icmp6.Close();
         exit(1); // fatal error if the control channel fails.
@@ -201,7 +201,7 @@
         getCurrentTime();
 
         if (x < 0) {
-            debugs(42, 0, HERE << " FATAL Shutdown. select()==" << x << ", ERR: " << xstrerror());
+            debugs(42, DBG_CRITICAL, HERE << " FATAL Shutdown. select()==" << x << ", ERR: " << xstrerror());
             control.Close();
             exit(1);
         }
@@ -219,7 +219,7 @@
 
         if (PINGER_TIMEOUT + last_check_time < squid_curtime) {
             if (send(LINK_TO_SQUID, &tv, 0, 0) < 0) {
-                debugs(42, 0, "pinger: Closing. No requests in last " << PINGER_TIMEOUT << " seconds.");
+                debugs(42, DBG_CRITICAL, "pinger: Closing. No requests in last " << PINGER_TIMEOUT << " seconds.");
                 control.Close();
                 exit(1);
             }

=== modified file 'src/icp_v2.cc'
--- src/icp_v2.cc	2012-07-23 07:02:06 +0000
+++ src/icp_v2.cc	2012-08-02 21:18:43 +0000
@@ -506,8 +506,8 @@
 _icp_common_t::handleReply(char *buf, Ip::Address &from)
 {
     if (neighbors_do_private_keys && reqnum == 0) {
-        debugs(12, 0, "icpHandleIcpV2: Neighbor " << from << " returned reqnum = 0");
-        debugs(12, 0, "icpHandleIcpV2: Disabling use of private keys");
+        debugs(12, DBG_CRITICAL, "icpHandleIcpV2: Neighbor " << from << " returned reqnum = 0");
+        debugs(12, DBG_CRITICAL, "icpHandleIcpV2: Disabling use of private keys");
         neighbors_do_private_keys = 0;
     }
 
@@ -562,7 +562,7 @@
         break;
 
     default:
-        debugs(12, 0, "icpHandleIcpV2: UNKNOWN OPCODE: " << header.opcode << " from " << from);
+        debugs(12, DBG_CRITICAL, "icpHandleIcpV2: UNKNOWN OPCODE: " << header.opcode << " from " << from);
 
         break;
     }
@@ -621,7 +621,7 @@
             if (errno != ECONNREFUSED && errno != EHOSTUNREACH)
 #endif
 
-                debugs(50, 1, "icpHandleUdp: FD " << sock << " recvfrom: " << xstrerror());
+                debugs(50, DBG_IMPORTANT, "icpHandleUdp: FD " << sock << " recvfrom: " << xstrerror());
 
             break;
         }
@@ -652,7 +652,7 @@
         else if (icp_version == ICP_VERSION_3)
             icpHandleIcpV3(sock, from, buf, len);
         else
-            debugs(12, 1, "WARNING: Unused ICP version " << icp_version <<
+            debugs(12, DBG_IMPORTANT, "WARNING: Unused ICP version " << icp_version <<
                    " received from " << from);
     }
 }

=== modified file 'src/icp_v3.cc'
--- src/icp_v3.cc	2012-01-20 18:55:04 +0000
+++ src/icp_v3.cc	2012-08-02 21:18:43 +0000
@@ -150,7 +150,7 @@
         break;
 
     default:
-        debugs(12, 0, "icpHandleIcpV3: UNKNOWN OPCODE: " << header.opcode << " from " << from);
+        debugs(12, DBG_CRITICAL, "icpHandleIcpV3: UNKNOWN OPCODE: " << header.opcode << " from " << from);
         break;
     }
 }

=== modified file 'src/ip/Address.cc'
--- src/ip/Address.cc	2012-07-25 22:29:21 +0000
+++ src/ip/Address.cc	2012-08-02 21:18:43 +0000
@@ -353,7 +353,7 @@
         return GetReverseString6(buf, m_SocketAddr.sin6_addr);
     }
 
-    debugs(14,0, "Unable to convert '" << NtoA(buf,MAX_IPSTRLEN) << "' to the rDNS type requested.");
+    debugs(14, DBG_CRITICAL, "Unable to convert '" << NtoA(buf,MAX_IPSTRLEN) << "' to the rDNS type requested.");
 
     buf[0] = '\0';
 
@@ -858,7 +858,7 @@
         GetInAddr(tmp);
         inet_ntop(AF_INET, &tmp, buf, blen);
     } else {
-        debugs(14,0,"WARNING: Corrupt IP Address details OR required to display in unknown format (" <<
+        debugs(14, DBG_CRITICAL, "WARNING: Corrupt IP Address details OR required to display in unknown format (" <<
                force << "). accepted={" << AF_UNSPEC << "," << AF_INET << "," << AF_INET6 << "}");
         fprintf(stderr,"WARNING: Corrupt IP Address details OR required to display in unknown format (%d). accepted={%d,%d,%d} ",
                 force, AF_UNSPEC, AF_INET, AF_INET6);
@@ -1032,7 +1032,7 @@
     // default:
     // non-compatible IPv6 Pure Address
 
-    debugs(14,1, HERE << "Ip::Address::GetInAddr : Cannot convert non-IPv4 to IPv4. IPA=" << *this);
+    debugs(14, DBG_IMPORTANT, HERE << "Ip::Address::GetInAddr : Cannot convert non-IPv4 to IPv4. IPA=" << *this);
     memset(&buf,0xFFFFFFFF,sizeof(struct in_addr));
     assert(false);
     return false;

=== modified file 'src/ipc.cc'
--- src/ipc.cc	2012-07-17 17:38:50 +0000
+++ src/ipc.cc	2012-08-02 21:18:43 +0000
@@ -138,14 +138,14 @@
         int c2p[2];
 
         if (pipe(p2c) < 0) {
-            debugs(54, 0, "ipcCreate: pipe: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: pipe: " << xstrerror());
             return -1; // maybe ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
         fd_open(prfd = p2c[0], FD_PIPE, "IPC FIFO Parent Read");
         fd_open(cwfd = p2c[1], FD_PIPE, "IPC FIFO Child Write");
 
         if (pipe(c2p) < 0) {
-            debugs(54, 0, "ipcCreate: pipe: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: pipe: " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
         fd_open(crfd = c2p[0], FD_PIPE, "IPC FIFO Child Read");
@@ -161,7 +161,7 @@
         int buflen = 32768;
 
         if (socketpair(AF_UNIX, SOCK_STREAM, 0, fds) < 0) {
-            debugs(54, 0, "ipcCreate: socketpair: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: socketpair: " << xstrerror());
             return -1;
         }
 
@@ -178,7 +178,7 @@
         int fds[2];
 
         if (socketpair(AF_UNIX, SOCK_DGRAM, 0, fds) < 0) {
-            debugs(54, 0, "ipcCreate: socketpair: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: socketpair: " << xstrerror());
             return -1;
         }
 
@@ -203,7 +203,7 @@
 
         if (getsockname(pwfd, AI->ai_addr, &AI->ai_addrlen) < 0) {
             PaS.FreeAddrInfo(AI);
-            debugs(54, 0, "ipcCreate: getsockname: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: getsockname: " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
 
@@ -217,7 +217,7 @@
 
         if (getsockname(crfd, AI->ai_addr, &AI->ai_addrlen) < 0) {
             ChS.FreeAddrInfo(AI);
-            debugs(54, 0, "ipcCreate: getsockname: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: getsockname: " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
 
@@ -231,7 +231,7 @@
 
     if (type == IPC_TCP_SOCKET) {
         if (listen(crfd, 1) < 0) {
-            debugs(54, 1, "ipcCreate: listen FD " << crfd << ": " << xstrerror());
+            debugs(54, DBG_IMPORTANT, "ipcCreate: listen FD " << crfd << ": " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
 
@@ -242,7 +242,7 @@
     logsFlush();
 
     if ((pid = fork()) < 0) {
-        debugs(54, 1, "ipcCreate: fork: " << xstrerror());
+        debugs(54, DBG_IMPORTANT, "ipcCreate: fork: " << xstrerror());
         return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
     }
 
@@ -268,13 +268,13 @@
             x = read(prfd, hello_buf, HELLO_BUF_SZ - 1);
 
         if (x < 0) {
-            debugs(54, 0, "ipcCreate: PARENT: hello read test failed");
-            debugs(54, 0, "--> read: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: PARENT: hello read test failed");
+            debugs(54, DBG_CRITICAL, "--> read: " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         } else if (strcmp(hello_buf, hello_string)) {
-            debugs(54, 0, "ipcCreate: PARENT: hello read test failed");
-            debugs(54, 0, "--> read returned " << x);
-            debugs(54, 0, "--> got '" << rfc1738_escape(hello_buf) << "'");
+            debugs(54, DBG_CRITICAL, "ipcCreate: PARENT: hello read test failed");
+            debugs(54, DBG_CRITICAL, "--> read returned " << x);
+            debugs(54, DBG_CRITICAL, "--> got '" << rfc1738_escape(hello_buf) << "'");
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
 
@@ -319,7 +319,7 @@
         debugs(54, 3, "ipcCreate: calling accept on FD " << crfd);
 
         if ((fd = accept(crfd, NULL, NULL)) < 0) {
-            debugs(54, 0, "ipcCreate: FD " << crfd << " accept: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: FD " << crfd << " accept: " << xstrerror());
             _exit(1);
         }
 
@@ -335,14 +335,14 @@
         x = comm_udp_send(cwfd, hello_string, strlen(hello_string) + 1, 0);
 
         if (x < 0) {
-            debugs(54, 0, "sendto FD " << cwfd << ": " << xstrerror());
-            debugs(54, 0, "ipcCreate: CHILD: hello write test failed");
+            debugs(54, DBG_CRITICAL, "sendto FD " << cwfd << ": " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: hello write test failed");
             _exit(1);
         }
     } else {
         if (write(cwfd, hello_string, strlen(hello_string) + 1) < 0) {
-            debugs(54, 0, "write FD " << cwfd << ": " << xstrerror());
-            debugs(54, 0, "ipcCreate: CHILD: hello write test failed");
+            debugs(54, DBG_CRITICAL, "write FD " << cwfd << ": " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: hello write test failed");
             _exit(1);
         }
     }
@@ -400,7 +400,7 @@
 
     debug_log = fdopen(2, "a+");
 
-    debugs(54, 0, "ipcCreate: " << prog << ": " << xstrerror());
+    debugs(54, DBG_CRITICAL, "ipcCreate: " << prog << ": " << xstrerror());
 
     _exit(1);
 

=== modified file 'src/ipc/Coordinator.cc'
--- src/ipc/Coordinator.cc	2012-01-20 18:55:04 +0000
+++ src/ipc/Coordinator.cc	2012-08-02 21:10:18 +0000
@@ -124,7 +124,7 @@
 #endif
 
     default:
-        debugs(54, 1, HERE << "Unhandled message type: " << message.type());
+        debugs(54, DBG_IMPORTANT, HERE << "Unhandled message type: " << message.type());
         break;
     }
 }

=== modified file 'src/ipc/FdNotes.cc'
--- src/ipc/FdNotes.cc	2012-01-20 18:55:04 +0000
+++ src/ipc/FdNotes.cc	2012-08-02 21:10:18 +0000
@@ -28,6 +28,6 @@
     if (fdnNone < fdNoteId && fdNoteId < fdnEnd)
         return FdNotes[fdNoteId];
 
-    debugs(54, 1, HERE << "salvaged bug: wrong fd_note ID: " << fdNoteId);
+    debugs(54, DBG_IMPORTANT, HERE << "salvaged bug: wrong fd_note ID: " << fdNoteId);
     return FdNotes[fdnNone];
 }

=== modified file 'src/ipc/Queue.cc'
--- src/ipc/Queue.cc	2012-01-20 18:55:04 +0000
+++ src/ipc/Queue.cc	2012-08-02 06:19:48 +0000
@@ -51,7 +51,12 @@
 Ipc::QueueReaders::QueueReaders(const int aCapacity): theCapacity(aCapacity)
 {
     Must(theCapacity > 0);
-    new (theReaders) QueueReader[theCapacity];
+    theReaders=new QueueReader[theCapacity];
+}
+
+Ipc::QueueReaders::~QueueReaders()
+{
+    delete[] theReaders;
 }
 
 size_t

=== modified file 'src/ipc/Queue.h'
--- src/ipc/Queue.h	2011-10-28 01:01:41 +0000
+++ src/ipc/Queue.h	2012-08-02 06:19:48 +0000
@@ -64,11 +64,16 @@
 {
 public:
     QueueReaders(const int aCapacity);
+    ~QueueReaders();
     size_t sharedMemorySize() const;
     static size_t SharedMemorySize(const int capacity);
 
     const int theCapacity; /// number of readers
-    QueueReader theReaders[]; /// readers
+    QueueReader *theReaders; /// readers
+private:
+    QueueReaders(); //not implemented
+    QueueReaders& operator =(const QueueReaders&); //not implemented
+    QueueReaders(const QueueReaders&); //not implemented
 };
 
 /**

=== modified file 'src/ipc/StoreMap.cc'
--- src/ipc/StoreMap.cc	2012-01-20 18:55:04 +0000
+++ src/ipc/StoreMap.cc	2012-08-02 06:19:48 +0000
@@ -308,6 +308,12 @@
 Ipc::StoreMap::Shared::Shared(const int aLimit, const size_t anExtrasSize):
         limit(aLimit), extrasSize(anExtrasSize), count(0)
 {
+    slots=new Slot[limit];
+}
+
+Ipc::StoreMap::Shared::~Shared()
+{
+    delete[] slots;
 }
 
 size_t

=== modified file 'src/ipc/StoreMap.h'
--- src/ipc/StoreMap.h	2011-12-07 18:56:59 +0000
+++ src/ipc/StoreMap.h	2012-08-02 06:19:48 +0000
@@ -62,11 +62,16 @@
         Shared(const int aLimit, const size_t anExtrasSize);
         size_t sharedMemorySize() const;
         static size_t SharedMemorySize(const int limit, const size_t anExtrasSize);
+        ~Shared();
 
         const int limit; ///< maximum number of map slots
         const size_t extrasSize; ///< size of slot extra data
         Atomic::Word count; ///< current number of map slots
-        Slot slots[]; ///< slots storage
+        Slot *slots; ///< slots storage
+    private:
+        Shared(); //disabled
+        Shared &operator=(const Shared&); //disabled
+        Shared(const Shared&); //disabled
     };
 
 public:

=== modified file 'src/ipc/Strand.cc'
--- src/ipc/Strand.cc	2012-01-20 18:55:04 +0000
+++ src/ipc/Strand.cc	2012-08-02 21:10:18 +0000
@@ -106,7 +106,7 @@
 #endif
 
     default:
-        debugs(54, 1, HERE << "Unhandled message type: " << message.type());
+        debugs(54, DBG_IMPORTANT, HERE << "Unhandled message type: " << message.type());
         break;
     }
 }

=== modified file 'src/ipc/mem/PageStack.cc'
--- src/ipc/mem/PageStack.cc	2012-01-20 18:55:04 +0000
+++ src/ipc/mem/PageStack.cc	2012-08-02 06:19:48 +0000
@@ -23,6 +23,12 @@
     // initially, all pages are free
     for (Offset i = 0; i < theSize; ++i)
         theItems[i] = i + 1; // skip page number zero to keep numbers positive
+    theItems=new Item[theSize];
+}
+
+Ipc::Mem::PageStack::~PageStack()
+{
+    delete[] theItems;
 }
 
 /*

=== modified file 'src/ipc/mem/PageStack.h'
--- src/ipc/mem/PageStack.h	2011-10-28 01:01:41 +0000
+++ src/ipc/mem/PageStack.h	2012-08-02 06:19:48 +0000
@@ -25,6 +25,7 @@
     typedef uint32_t Value; ///< stack item type (a free page number)
 
     PageStack(const uint32_t aPoolId, const unsigned int aCapacity, const size_t aPageSize);
+    ~PageStack();
 
     unsigned int capacity() const { return theCapacity; }
     size_t pageSize() const { return thePageSize; }
@@ -67,7 +68,7 @@
     Atomic::WordT<Offset> theFirstWritable;
 
     typedef Atomic::WordT<Value> Item;
-    Item theItems[]; ///< page number storage
+    Item *theItems; ///< page number storage
 };
 
 } // namespace Mem

=== modified file 'src/ipc_win32.cc'
--- src/ipc_win32.cc	2012-07-23 19:37:47 +0000
+++ src/ipc_win32.cc	2012-08-02 21:18:43 +0000
@@ -167,7 +167,7 @@
                                 0,
                                 name);
     } else if (type == IPC_FIFO) {
-        debugs(54, 0, "ipcCreate: " << prog << ": use IPC_TCP_SOCKET instead of IP_FIFO on Windows");
+        debugs(54, DBG_CRITICAL, "ipcCreate: " << prog << ": use IPC_TCP_SOCKET instead of IP_FIFO on Windows");
         assert(0);
     } else {
         assert(IPC_NONE);
@@ -185,12 +185,12 @@
     }
 
     if (crfd < 0) {
-        debugs(54, 0, "ipcCreate: Failed to create child FD.");
+        debugs(54, DBG_CRITICAL, "ipcCreate: Failed to create child FD.");
         return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
     }
 
     if (pwfd < 0) {
-        debugs(54, 0, "ipcCreate: Failed to create server FD.");
+        debugs(54, DBG_CRITICAL, "ipcCreate: Failed to create server FD.");
         return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
     }
 
@@ -200,7 +200,7 @@
         tmp_addr.InitAddrInfo(aiPS);
 
         if (getsockname(pwfd, aiPS->ai_addr, &(aiPS->ai_addrlen) ) < 0) {
-            debugs(54, 0, "ipcCreate: getsockname: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: getsockname: " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
 
@@ -211,7 +211,7 @@
         tmp_addr.InitAddrInfo(aiCS);
 
         if (getsockname(crfd, aiCS->ai_addr, &(aiCS->ai_addrlen) ) < 0) {
-            debugs(54, 0, "ipcCreate: getsockname: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: getsockname: " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
 
@@ -223,7 +223,7 @@
 
     if (type == IPC_TCP_SOCKET) {
         if (listen(crfd, 1) < 0) {
-            debugs(54, 1, "ipcCreate: listen FD " << crfd << ": " << xstrerror());
+            debugs(54, DBG_IMPORTANT, "ipcCreate: listen FD " << crfd << ": " << xstrerror());
             return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
         }
 
@@ -250,7 +250,7 @@
     thread = _beginthreadex(NULL, 0, ipc_thread_1, &params, 0, NULL);
 
     if (thread == 0) {
-        debugs(54, 1, "ipcCreate: _beginthread: " << xstrerror());
+        debugs(54, DBG_IMPORTANT, "ipcCreate: _beginthread: " << xstrerror());
         return ipcCloseAllFD(prfd, pwfd, crfd, cwfd);
     }
 
@@ -264,14 +264,14 @@
     x = recv(prfd, (void *)hello_buf, HELLO_BUF_SZ - 1, 0);
 
     if (x < 0) {
-        debugs(54, 0, "ipcCreate: PARENT: hello read test failed");
-        debugs(54, 0, "--> read: " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: PARENT: hello read test failed");
+        debugs(54, DBG_CRITICAL, "--> read: " << xstrerror());
         CloseHandle((HANDLE) thread);
         return ipcCloseAllFD(prfd, pwfd, -1, -1);
     } else if (strcmp(hello_buf, hello_string)) {
-        debugs(54, 0, "ipcCreate: PARENT: hello read test failed");
-        debugs(54, 0, "--> read returned " << x);
-        debugs(54, 0, "--> got '" << rfc1738_escape(hello_buf) << "'");
+        debugs(54, DBG_CRITICAL, "ipcCreate: PARENT: hello read test failed");
+        debugs(54, DBG_CRITICAL, "--> read returned " << x);
+        debugs(54, DBG_CRITICAL, "--> got '" << rfc1738_escape(hello_buf) << "'");
         CloseHandle((HANDLE) thread);
         return ipcCloseAllFD(prfd, pwfd, -1, -1);
     }
@@ -279,8 +279,8 @@
     x = send(pwfd, (const void *)ok_string, strlen(ok_string), 0);
 
     if (x < 0) {
-        debugs(54, 0, "ipcCreate: PARENT: OK write test failed");
-        debugs(54, 0, "--> read: " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: PARENT: OK write test failed");
+        debugs(54, DBG_CRITICAL, "--> read: " << xstrerror());
         CloseHandle((HANDLE) thread);
         return ipcCloseAllFD(prfd, pwfd, -1, -1);
     }
@@ -289,14 +289,14 @@
     x = recv(prfd, (void *)hello_buf, HELLO_BUF_SZ - 1, 0);
 
     if (x < 0) {
-        debugs(54, 0, "ipcCreate: PARENT: OK read test failed");
-        debugs(54, 0, "--> read: " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: PARENT: OK read test failed");
+        debugs(54, DBG_CRITICAL, "--> read: " << xstrerror());
         CloseHandle((HANDLE) thread);
         return ipcCloseAllFD(prfd, pwfd, -1, -1);
     } else if (!strcmp(hello_buf, err_string)) {
-        debugs(54, 0, "ipcCreate: PARENT: OK read test failed");
-        debugs(54, 0, "--> read returned " << x);
-        debugs(54, 0, "--> got '" << rfc1738_escape(hello_buf) << "'");
+        debugs(54, DBG_CRITICAL, "ipcCreate: PARENT: OK read test failed");
+        debugs(54, DBG_CRITICAL, "--> read returned " << x);
+        debugs(54, DBG_CRITICAL, "--> got '" << rfc1738_escape(hello_buf) << "'");
         CloseHandle((HANDLE) thread);
         return ipcCloseAllFD(prfd, pwfd, -1, -1);
     }
@@ -353,8 +353,8 @@
     x = send(cwfd, (const void *)buf, len, 0);
 
     if (x < 0) {
-        debugs(54, 0, "sendto FD " << cwfd << ": " << xstrerror());
-        debugs(54, 0, "ipcCreate: CHILD: hello write test failed");
+        debugs(54, DBG_CRITICAL, "sendto FD " << cwfd << ": " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: hello write test failed");
     }
 
     return x;
@@ -409,7 +409,7 @@
         debugs(54, 3, "ipcCreate: calling accept on FD " << crfd);
 
         if ((fd = accept(crfd, NULL, NULL)) < 0) {
-            debugs(54, 0, "ipcCreate: FD " << crfd << " accept: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: FD " << crfd << " accept: " << xstrerror());
             goto cleanup;
         }
 
@@ -427,8 +427,8 @@
     x = send(cwfd, (const void *)hello_string, strlen(hello_string) + 1, 0);
 
     if (x < 0) {
-        debugs(54, 0, "sendto FD " << cwfd << ": " << xstrerror());
-        debugs(54, 0, "ipcCreate: CHILD: hello write test failed");
+        debugs(54, DBG_CRITICAL, "sendto FD " << cwfd << ": " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: hello write test failed");
         goto cleanup;
     }
 
@@ -437,25 +437,25 @@
     x = recv(crfd, (void *)buf1, 8191, 0);
 
     if (x < 0) {
-        debugs(54, 0, "ipcCreate: CHILD: OK read test failed");
-        debugs(54, 0, "--> read: " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: OK read test failed");
+        debugs(54, DBG_CRITICAL, "--> read: " << xstrerror());
         goto cleanup;
     } else if (strcmp(buf1, ok_string)) {
-        debugs(54, 0, "ipcCreate: CHILD: OK read test failed");
-        debugs(54, 0, "--> read returned " << x);
-        debugs(54, 0, "--> got '" << rfc1738_escape(hello_buf) << "'");
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: OK read test failed");
+        debugs(54, DBG_CRITICAL, "--> read returned " << x);
+        debugs(54, DBG_CRITICAL, "--> got '" << rfc1738_escape(hello_buf) << "'");
         goto cleanup;
     }
 
     /* assign file descriptors to child process */
     if (_pipe(p2c, 1024, _O_BINARY | _O_NOINHERIT) < 0) {
-        debugs(54, 0, "ipcCreate: CHILD: pipe: " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: pipe: " << xstrerror());
         ipcSend(cwfd, err_string, strlen(err_string));
         goto cleanup;
     }
 
     if (_pipe(c2p, 1024, _O_BINARY | _O_NOINHERIT) < 0) {
-        debugs(54, 0, "ipcCreate: CHILD: pipe: " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: pipe: " << xstrerror());
         ipcSend(cwfd, err_string, strlen(err_string));
         goto cleanup;
     }
@@ -465,7 +465,7 @@
         crfd_ipc = cwfd_ipc = comm_open(SOCK_DGRAM, IPPROTO_UDP, local_addr, 0, buf1);
 
         if (crfd_ipc < 0) {
-            debugs(54, 0, "ipcCreate: CHILD: Failed to create child FD for " << prog << ".");
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: Failed to create child FD for " << prog << ".");
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         }
@@ -474,7 +474,7 @@
         prfd_ipc = pwfd_ipc = comm_open(SOCK_DGRAM, IPPROTO_UDP, local_addr, 0, buf1);
 
         if (pwfd_ipc < 0) {
-            debugs(54, 0, "ipcCreate: CHILD: Failed to create server FD for " << prog << ".");
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: Failed to create server FD for " << prog << ".");
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         }
@@ -482,7 +482,7 @@
         PS_ipc.InitAddrInfo(aiPS_ipc);
 
         if (getsockname(pwfd_ipc, aiPS_ipc->ai_addr, &(aiPS_ipc->ai_addrlen)) < 0) {
-            debugs(54, 0, "ipcCreate: getsockname: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: getsockname: " << xstrerror());
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         }
@@ -494,7 +494,7 @@
         CS_ipc.InitAddrInfo(aiCS_ipc);
 
         if (getsockname(crfd_ipc, aiCS_ipc->ai_addr, &(aiCS_ipc->ai_addrlen)) < 0) {
-            debugs(54, 0, "ipcCreate: getsockname: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: getsockname: " << xstrerror());
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         }
@@ -589,7 +589,7 @@
 
     if (pid == -1) {
         errno = x;
-        debugs(54, 0, "ipcCreate: CHILD: " << params->prog << ": " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: " << params->prog << ": " << xstrerror());
 
         ipcSend(cwfd, err_string, strlen(err_string));
         goto cleanup;
@@ -601,7 +601,7 @@
         memset(&wpi, 0, sizeof(wpi));
 
         if (SOCKET_ERROR == WSADuplicateSocket(crfd_ipc, pid, &wpi)) {
-            debugs(54, 0, "ipcCreate: CHILD: WSADuplicateSocket: " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: WSADuplicateSocket: " << xstrerror());
 
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
@@ -610,8 +610,8 @@
         x = write(c2p[1], (const char *) &wpi, sizeof(wpi));
 
         if (x < (ssize_t)sizeof(wpi)) {
-            debugs(54, 0, "ipcCreate: CHILD: write FD " << c2p[1] << ": " << xstrerror());
-            debugs(54, 0, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: write FD " << c2p[1] << ": " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
 
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
@@ -620,16 +620,16 @@
         x = read(p2c[0], buf1, 8192);
 
         if (x < 0) {
-            debugs(54, 0, "ipcCreate: CHILD: read FD " << p2c[0] << ": " << xstrerror());
-            debugs(54, 0, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: read FD " << p2c[0] << ": " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
 
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         } else if (strncmp(buf1, ok_string, strlen(ok_string))) {
-            debugs(54, 0, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
-            debugs(54, 0, "--> read returned " << x);
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
+            debugs(54, DBG_CRITICAL, "--> read returned " << x);
             buf1[x] = '\0';
-            debugs(54, 0, "--> got '" << rfc1738_escape(buf1) << "'");
+            debugs(54, DBG_CRITICAL, "--> got '" << rfc1738_escape(buf1) << "'");
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         }
@@ -637,8 +637,8 @@
         x = write(c2p[1], (const char *) &PS_ipc, sizeof(PS_ipc));
 
         if (x < (ssize_t)sizeof(PS_ipc)) {
-            debugs(54, 0, "ipcCreate: CHILD: write FD " << c2p[1] << ": " << xstrerror());
-            debugs(54, 0, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: write FD " << c2p[1] << ": " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
 
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
@@ -647,16 +647,16 @@
         x = read(p2c[0], buf1, 8192);
 
         if (x < 0) {
-            debugs(54, 0, "ipcCreate: CHILD: read FD " << p2c[0] << ": " << xstrerror());
-            debugs(54, 0, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: read FD " << p2c[0] << ": " << xstrerror());
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
 
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         } else if (strncmp(buf1, ok_string, strlen(ok_string))) {
-            debugs(54, 0, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
-            debugs(54, 0, "--> read returned " << x);
+            debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: " << prog << ": socket exchange failed");
+            debugs(54, DBG_CRITICAL, "--> read returned " << x);
             buf1[x] = '\0';
-            debugs(54, 0, "--> got '" << rfc1738_escape(buf1) << "'");
+            debugs(54, DBG_CRITICAL, "--> got '" << rfc1738_escape(buf1) << "'");
             ipcSend(cwfd, err_string, strlen(err_string));
             goto cleanup;
         }
@@ -695,7 +695,7 @@
     thread = (HANDLE)_beginthreadex(NULL, 0, ipc_thread_2, &thread_params, 0, NULL);
 
     if (!thread) {
-        debugs(54, 0, "ipcCreate: CHILD: _beginthreadex: " << xstrerror());
+        debugs(54, DBG_CRITICAL, "ipcCreate: CHILD: _beginthreadex: " << xstrerror());
         ipcSend(cwfd, err_string, strlen(err_string));
         goto cleanup;
     }
@@ -761,14 +761,14 @@
             WaitForSingleObject(hProcess, type == IPC_UDP_SOCKET ? 12000 : 5000)) {
 
         getCurrentTime();
-        debugs(54, 0, "ipc(" << prog << "," << pid << "): WARNING: " << prog <<
+        debugs(54, DBG_CRITICAL, "ipc(" << prog << "," << pid << "): WARNING: " << prog <<
                " didn't exit in " << (type == IPC_UDP_SOCKET ? 12 : 5) << " seconds.");
 
     }
 
     if (thread && WAIT_OBJECT_0 != WaitForSingleObject(thread, 3000)) {
         getCurrentTime();
-        debugs(54, 0, "ipc(" << prog << "," << pid << "): WARNING: ipc_thread_2 didn't exit in 3 seconds.");
+        debugs(54, DBG_CRITICAL, "ipc(" << prog << "," << pid << "): WARNING: ipc_thread_2 didn't exit in 3 seconds.");
 
     }
 

=== modified file 'src/ipcache.cc'
--- src/ipcache.cc	2012-07-20 15:31:04 +0000
+++ src/ipcache.cc	2012-08-02 21:18:43 +0000
@@ -186,12 +186,12 @@
 ipcacheRelease(ipcache_entry * i, bool dofree)
 {
     if (!i) {
-        debugs(14, 0, "ipcacheRelease: Releasing entry with i=<NULL>");
+        debugs(14, DBG_CRITICAL, "ipcacheRelease: Releasing entry with i=<NULL>");
         return;
     }
 
     if (!i || !i->hash.key) {
-        debugs(14, 0, "ipcacheRelease: Releasing entry without hash link!");
+        debugs(14, DBG_CRITICAL, "ipcacheRelease: Releasing entry without hash link!");
         return;
     }
 
@@ -371,7 +371,7 @@
     i->addrs.count = 0;
 
     if (inbuf == NULL) {
-        debugs(14, 1, "ipcacheParse: Got <NULL> reply");
+        debugs(14, DBG_IMPORTANT, "ipcacheParse: Got <NULL> reply");
         i->error_message = xstrdup("Internal Error");
         return -1;
     }
@@ -381,7 +381,7 @@
     token = strtok(buf, w_space);
 
     if (NULL == token) {
-        debugs(14, 1, "ipcacheParse: expecting result, got '" << inbuf << "'");
+        debugs(14, DBG_IMPORTANT, "ipcacheParse: expecting result, got '" << inbuf << "'");
 
         i->error_message = xstrdup("Internal Error");
         return -1;
@@ -395,7 +395,7 @@
     }
 
     if (0 != strcmp(token, "$addr")) {
-        debugs(14, 1, "ipcacheParse: expecting '$addr', got '" << inbuf << "' in response to '" << name << "'");
+        debugs(14, DBG_IMPORTANT, "ipcacheParse: expecting '$addr', got '" << inbuf << "' in response to '" << name << "'");
 
         i->error_message = xstrdup("Internal Error");
         return -1;
@@ -404,7 +404,7 @@
     token = strtok(NULL, w_space);
 
     if (NULL == token) {
-        debugs(14, 1, "ipcacheParse: expecting TTL, got '" << inbuf << "' in response to '" << name << "'");
+        debugs(14, DBG_IMPORTANT, "ipcacheParse: expecting TTL, got '" << inbuf << "' in response to '" << name << "'");
 
         i->error_message = xstrdup("Internal Error");
         return -1;
@@ -432,14 +432,14 @@
             if ( i->addrs.in_addrs[j] = A[k] )
                 ++j;
             else
-                debugs(14, 1, "ipcacheParse: Invalid IP address '" << A[k] << "' in response to '" << name << "'");
+                debugs(14, DBG_IMPORTANT, "ipcacheParse: Invalid IP address '" << A[k] << "' in response to '" << name << "'");
         }
 
         i->addrs.count = (unsigned char) j;
     }
 
     if (i->addrs.count <= 0) {
-        debugs(14, 1, "ipcacheParse: No addresses in response to '" << name << "'");
+        debugs(14, DBG_IMPORTANT, "ipcacheParse: No addresses in response to '" << name << "'");
         return -1;
     }
 
@@ -496,7 +496,7 @@
 
         if (Ip::EnableIpv6 && answers[k].type == RFC1035_TYPE_AAAA) {
             if (answers[k].rdlength != sizeof(struct in6_addr)) {
-                debugs(14, 1, "ipcacheParse: Invalid IPv6 address in response to '" << name << "'");
+                debugs(14, DBG_IMPORTANT, "ipcacheParse: Invalid IPv6 address in response to '" << name << "'");
                 continue;
             }
             ++na;
@@ -506,7 +506,7 @@
 
         if (answers[k].type == RFC1035_TYPE_A) {
             if (answers[k].rdlength != sizeof(struct in_addr)) {
-                debugs(14, 1, "ipcacheParse: Invalid IPv4 address in response to '" << name << "'");
+                debugs(14, DBG_IMPORTANT, "ipcacheParse: Invalid IPv4 address in response to '" << name << "'");
                 continue;
             }
             ++na;
@@ -525,7 +525,7 @@
         debugs(14, 9, HERE << "Unknown RR type received: type=" << answers[k].type << " starting at " << &(answers[k]) );
     }
     if (na == 0) {
-        debugs(14, 1, "ipcacheParse: No Address records in response to '" << name << "'");
+        debugs(14, DBG_IMPORTANT, "ipcacheParse: No Address records in response to '" << name << "'");
         i->error_message = xstrdup("No Address records");
         if (cname_found)
             ++IpcacheStats.cname_only;
@@ -805,12 +805,12 @@
     char buf[MAX_IPSTRLEN];
 
     if (!sentry) {
-        debugs(14, 0, HERE << "CRITICAL: sentry is NULL!");
+        debugs(14, DBG_CRITICAL, HERE << "CRITICAL: sentry is NULL!");
         return;
     }
 
     if (!i) {
-        debugs(14, 0, HERE << "CRITICAL: ipcache_entry is NULL!");
+        debugs(14, DBG_CRITICAL, HERE << "CRITICAL: ipcache_entry is NULL!");
         storeAppendPrintf(sentry, "CRITICAL ERROR\n");
         return;
     }
@@ -983,7 +983,7 @@
 ipcacheUnlockEntry(ipcache_entry * i)
 {
     if (i->locks < 1) {
-        debugs(14, 1, "WARNING: ipcacheEntry unlocked with no lock! locks=" << i->locks);
+        debugs(14, DBG_IMPORTANT, "WARNING: ipcacheEntry unlocked with no lock! locks=" << i->locks);
         return;
     }
 
@@ -1188,7 +1188,7 @@
         if (strchr(ipaddr, ':') && strspn(ipaddr, "0123456789abcdefABCDEF:") == strlen(ipaddr)) {
             debugs(14, 3, "ipcacheAddEntryFromHosts: Skipping IPv6 address '" << ipaddr << "'");
         } else {
-            debugs(14, 1, "ipcacheAddEntryFromHosts: Bad IP address '" << ipaddr << "'");
+            debugs(14, DBG_IMPORTANT, "ipcacheAddEntryFromHosts: Bad IP address '" << ipaddr << "'");
         }
 
         return 1;
@@ -1198,7 +1198,7 @@
         if (1 == i->flags.fromhosts) {
             ipcacheUnlockEntry(i);
         } else if (i->locks > 0) {
-            debugs(14, 1, "ipcacheAddEntryFromHosts: can't add static entry for locked name '" << name << "'");
+            debugs(14, DBG_IMPORTANT, "ipcacheAddEntryFromHosts: can't add static entry for locked name '" << name << "'");
             return 1;
         } else {
             ipcacheRelease(i);

=== modified file 'src/log/File.cc'
--- src/log/File.cc	2012-07-13 10:48:12 +0000
+++ src/log/File.cc	2012-08-02 21:10:18 +0000
@@ -49,7 +49,7 @@
     int ret;
     const char *patharg;
 
-    debugs(50, 1, "Logfile: opening log " << path);
+    debugs(50, DBG_IMPORTANT, "Logfile: opening log " << path);
     CBDATA_INIT_TYPE(Logfile);
 
     Logfile *lf = cbdataAlloc(Logfile);
@@ -82,7 +82,7 @@
         if (fatal_flag)
             fatalf("logfileOpen: %s: couldn't open!\n", path);
         else
-            debugs(50, 1, "logfileOpen: " << path << ": couldn't open!");
+            debugs(50, DBG_IMPORTANT, "logfileOpen: " << path << ": couldn't open!");
         lf->f_close(lf);
         cbdataFree(lf);
         return NULL;
@@ -100,7 +100,7 @@
 void
 logfileClose(Logfile * lf)
 {
-    debugs(50, 1, "Logfile: closing log " << lf->path);
+    debugs(50, DBG_IMPORTANT, "Logfile: closing log " << lf->path);
     lf->f_flush(lf);
     lf->f_close(lf);
     cbdataFree(lf);
@@ -109,7 +109,7 @@
 void
 logfileRotate(Logfile * lf)
 {
-    debugs(50, 1, "logfileRotate: " << lf->path);
+    debugs(50, DBG_IMPORTANT, "logfileRotate: " << lf->path);
     lf->f_rotate(lf);
 }
 

=== modified file 'src/log/ModDaemon.cc'
--- src/log/ModDaemon.cc	2012-07-20 15:31:04 +0000
+++ src/log/ModDaemon.cc	2012-08-02 21:10:18 +0000
@@ -238,7 +238,7 @@
     lf->f_rotate = logfile_mod_daemon_rotate;
 
     cbdataInternalLock(lf); // WTF?
-    debugs(50, 1, "Logfile Daemon: opening log " << path);
+    debugs(50, DBG_IMPORTANT, "Logfile Daemon: opening log " << path);
     ll = static_cast<l_daemon_t*>(xcalloc(1, sizeof(*ll)));
     lf->data = ll;
     ll->eol = 1;
@@ -270,7 +270,7 @@
 logfile_mod_daemon_close(Logfile * lf)
 {
     l_daemon_t *ll = static_cast<l_daemon_t *>(lf->data);
-    debugs(50, 1, "Logfile Daemon: closing log " << lf->path);
+    debugs(50, DBG_IMPORTANT, "Logfile Daemon: closing log " << lf->path);
     logfileFlush(lf);
     if (ll->rfd == ll->wfd)
         comm_close(ll->rfd);
@@ -289,7 +289,7 @@
 logfile_mod_daemon_rotate(Logfile * lf)
 {
     char tb[3];
-    debugs(50, 1, "logfileRotate: " << lf->path);
+    debugs(50, DBG_IMPORTANT, "logfileRotate: " << lf->path);
     tb[0] = 'R';
     tb[1] = '\n';
     tb[2] = '\0';

=== modified file 'src/log/ModSyslog.cc'
--- src/log/ModSyslog.cc	2012-07-23 15:34:12 +0000
+++ src/log/ModSyslog.cc	2012-08-02 21:10:18 +0000
@@ -108,7 +108,7 @@
         if (!strcmp(s, p->name) || !strcasecmp(s, p->name + 4))
             return p->value;
 
-    debugs(1, 1, "Unknown syslog facility/priority '" << s << "'");
+    debugs(1, DBG_IMPORTANT, "Unknown syslog facility/priority '" << s << "'");
     return 0;
 }
 

=== modified file 'src/log/ModTcp.cc'
--- src/log/ModTcp.cc	2012-01-20 18:55:04 +0000
+++ src/log/ModTcp.cc	2012-08-02 21:10:18 +0000
@@ -63,10 +63,10 @@
     fd_bytes(ll->fd, s, FD_WRITE);
 #if 0
     if (s < 0) {
-        debugs(1, 1, "logfile (tcp): got errno (" << errno << "):" << xstrerror());
+        debugs(1, DBG_IMPORTANT, "logfile (tcp): got errno (" << errno << "):" << xstrerror());
     }
     if (s != len) {
-        debugs(1, 1, "logfile (tcp): len=" << len << ", wrote=" << s);
+        debugs(1, DBG_IMPORTANT, "logfile (tcp): len=" << len << ", wrote=" << s);
     }
 #endif
 

=== modified file 'src/log/ModUdp.cc'
--- src/log/ModUdp.cc	2012-01-20 18:55:04 +0000
+++ src/log/ModUdp.cc	2012-08-02 21:10:18 +0000
@@ -61,10 +61,10 @@
     fd_bytes(ll->fd, s, FD_WRITE);
 #if 0
     if (s < 0) {
-        debugs(1, 1, "logfile (udp): got errno (" << errno << "):" << xstrerror());
+        debugs(1, DBG_IMPORTANT, "logfile (udp): got errno (" << errno << "):" << xstrerror());
     }
     if (s != len) {
-        debugs(1, 1, "logfile (udp): len=" << len << ", wrote=" << s);
+        debugs(1, DBG_IMPORTANT, "logfile (udp): len=" << len << ", wrote=" << s);
     }
 #endif
 

=== modified file 'src/log/access_log.cc'
--- src/log/access_log.cc	2012-07-23 07:02:06 +0000
+++ src/log/access_log.cc	2012-08-02 21:10:18 +0000
@@ -362,7 +362,7 @@
         if (mcast_miss_fd < 0)
             fatal("Cannot open Multicast Miss Stream Socket");
 
-        debugs(46, 1, "Multicast Miss Stream Socket opened on FD " << mcast_miss_fd);
+        debugs(46, DBG_IMPORTANT, "Multicast Miss Stream Socket opened on FD " << mcast_miss_fd);
 
         mcastSetTtl(mcast_miss_fd, Config.mcast_miss.ttl);
 

=== modified file 'src/main.cc'
--- src/main.cc	2012-06-01 07:44:48 +0000
+++ src/main.cc	2012-08-02 21:18:43 +0000
@@ -236,8 +236,8 @@
 void
 SignalEngine::doShutdown(time_t wait)
 {
-    debugs(1, 1, "Preparing for shutdown after " << statCounter.client_http.requests << " requests");
-    debugs(1, 1, "Waiting " << wait << " seconds for active connections to finish");
+    debugs(1, DBG_IMPORTANT, "Preparing for shutdown after " << statCounter.client_http.requests << " requests");
+    debugs(1, DBG_IMPORTANT, "Waiting " << wait << " seconds for active connections to finish");
 
     shutting_down = 1;
 
@@ -724,7 +724,7 @@
 static void
 mainReconfigureStart(void)
 {
-    debugs(1, 1, "Reconfiguring Squid Cache (version " << version_string << ")...");
+    debugs(1, DBG_IMPORTANT, "Reconfiguring Squid Cache (version " << version_string << ")...");
     reconfiguring = 1;
 
     // Initiate asynchronous closing sequence
@@ -910,10 +910,10 @@
 #endif
 
     if (geteuid() == 0) {
-        debugs(0, 0, "Squid is not safe to run as root!  If you must");
-        debugs(0, 0, "start Squid as root, then you must configure");
-        debugs(0, 0, "it to run as a non-priveledged user with the");
-        debugs(0, 0, "'cache_effective_user' option in the config file.");
+        debugs(0, DBG_CRITICAL, "Squid is not safe to run as root!  If you must");
+        debugs(0, DBG_CRITICAL, "start Squid as root, then you must configure");
+        debugs(0, DBG_CRITICAL, "it to run as a non-priveledged user with the");
+        debugs(0, DBG_CRITICAL, "'cache_effective_user' option in the config file.");
         fatal("Don't run Squid as root, set 'cache_effective_user'!");
     }
 }
@@ -927,18 +927,18 @@
         if (0 == strcmp("none", Config.coredump_dir)) {
             (void) 0;
         } else if (chdir(Config.coredump_dir) == 0) {
-            debugs(0, 1, "Set Current Directory to " << Config.coredump_dir);
+            debugs(0, DBG_IMPORTANT, "Set Current Directory to " << Config.coredump_dir);
             return;
         } else {
-            debugs(50, 0, "chdir: " << Config.coredump_dir << ": " << xstrerror());
+            debugs(50, DBG_CRITICAL, "chdir: " << Config.coredump_dir << ": " << xstrerror());
         }
     }
 
     /* If we don't have coredump_dir or couldn't cd there, report current dir */
     if (getcwd(pathbuf, MAXPATHLEN)) {
-        debugs(0, 1, "Current Directory is " << pathbuf);
+        debugs(0, DBG_IMPORTANT, "Current Directory is " << pathbuf);
     } else {
-        debugs(50, 0, "WARNING: Can't find current directory, getcwd: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "WARNING: Can't find current directory, getcwd: " << xstrerror());
     }
 }
 
@@ -974,29 +974,29 @@
 
 #endif
 
-    debugs(1, 0, "Starting Squid Cache version " << version_string << " for " << CONFIG_HOST_TYPE << "...");
+    debugs(1, DBG_CRITICAL, "Starting Squid Cache version " << version_string << " for " << CONFIG_HOST_TYPE << "...");
 
 #if _SQUID_WINDOWS_
     if (WIN32_run_mode == _WIN_SQUID_RUN_MODE_SERVICE) {
-        debugs(1, 0, "Running as " << WIN32_Service_name << " Windows System Service on " << WIN32_OS_string);
-        debugs(1, 0, "Service command line is: " << WIN32_Service_Command_Line);
+        debugs(1, DBG_CRITICAL, "Running as " << WIN32_Service_name << " Windows System Service on " << WIN32_OS_string);
+        debugs(1, DBG_CRITICAL, "Service command line is: " << WIN32_Service_Command_Line);
     } else
-        debugs(1, 0, "Running on " << WIN32_OS_string);
+        debugs(1, DBG_CRITICAL, "Running on " << WIN32_OS_string);
 #endif
 
-    debugs(1, 1, "Process ID " << getpid());
+    debugs(1, DBG_IMPORTANT, "Process ID " << getpid());
 
-    debugs(1, 1, "Process Roles:" << ProcessRoles());
+    debugs(1, DBG_IMPORTANT, "Process Roles:" << ProcessRoles());
 
     setSystemLimits();
-    debugs(1, 1, "With " << Squid_MaxFD << " file descriptors available");
+    debugs(1, DBG_IMPORTANT, "With " << Squid_MaxFD << " file descriptors available");
 
 #if _SQUID_MSWIN_
 
-    debugs(1, 1, "With " << _getmaxstdio() << " CRT stdio descriptors available");
+    debugs(1, DBG_IMPORTANT, "With " << _getmaxstdio() << " CRT stdio descriptors available");
 
     if (WIN32_Socks_initialized)
-        debugs(1, 1, "Windows sockets initialized");
+        debugs(1, DBG_IMPORTANT, "Windows sockets initialized");
 
     if (WIN32_OS_version > _WIN_OS_WINNT) {
         WIN32_IpAddrChangeMonitorInit();
@@ -1428,7 +1428,7 @@
         }
 
         setEffectiveUser();
-        debugs(0, 0, "Creating Swap Directories");
+        debugs(0, DBG_CRITICAL, "Creating Swap Directories");
         Store::Root().create();
 
         return 0;
@@ -1516,7 +1516,7 @@
     debug_log = stderr;
 
     if (strcmp(Config.pidFilename, "none") == 0) {
-        debugs(0, 1, "No pid_filename specified. Trusting you know what you are doing.");
+        debugs(0, DBG_IMPORTANT, "No pid_filename specified. Trusting you know what you are doing.");
     }
 
     pid = readPidFile();
@@ -1628,7 +1628,7 @@
     if (kill(pid, 0) < 0)
         return 0;
 
-    debugs(0, 0, "Squid is already running!  Process ID " <<  pid);
+    debugs(0, DBG_CRITICAL, "Squid is already running!  Process ID " <<  pid);
 
     return 1;
 }
@@ -1822,7 +1822,7 @@
     WIN32_svcstatusupdate(SERVICE_STOP_PENDING, 10000);
 #endif
 
-    debugs(1, 1, "Shutting down...");
+    debugs(1, DBG_IMPORTANT, "Shutting down...");
     dnsShutdown();
 #if USE_SSL_CRTD
     Ssl::Helper::GetInstance()->Shutdown();
@@ -1919,7 +1919,7 @@
 
     xmalloc_find_leaks();
 
-    debugs(1, 0, "Memory used after shutdown: " << xmalloc_total);
+    debugs(1, DBG_CRITICAL, "Memory used after shutdown: " << xmalloc_total);
 
 #endif
 #if MEM_GEN_TRACE
@@ -1936,7 +1936,7 @@
         }
     }
 
-    debugs(1, 1, "Squid Cache (Version " << version_string << "): Exiting normally.");
+    debugs(1, DBG_IMPORTANT, "Squid Cache (Version " << version_string << "): Exiting normally.");
 
     /*
      * DPW 2006-10-23

=== modified file 'src/mem.cc'
--- src/mem.cc	2012-07-23 19:37:47 +0000
+++ src/mem.cc	2012-08-02 21:10:18 +0000
@@ -162,9 +162,9 @@
         long int leaked = 0, dubious = 0, reachable = 0, suppressed = 0;
         stream << "Valgrind Report:\n";
         stream << "Type\tAmount\n";
-        debugs(13, 1, "Asking valgrind for memleaks");
+        debugs(13, DBG_IMPORTANT, "Asking valgrind for memleaks");
         VALGRIND_DO_LEAK_CHECK;
-        debugs(13, 1, "Getting valgrind statistics");
+        debugs(13, DBG_IMPORTANT, "Getting valgrind statistics");
         VALGRIND_COUNT_LEAKS(leaked, dubious, reachable, suppressed);
         stream << "Leaked\t" << leaked << "\n";
         stream << "Dubious\t" << dubious << "\n";
@@ -389,7 +389,7 @@
         new_pool_limit = Config.MemPools.limit;
     else {
         if (Config.MemPools.limit == 0)
-            debugs(13, 1, "memory_pools_limit 0 has been chagned to memory_pools_limit none. Please update your config");
+            debugs(13, DBG_IMPORTANT, "memory_pools_limit 0 has been chagned to memory_pools_limit none. Please update your config");
         new_pool_limit = -1;
     }
 
@@ -401,7 +401,7 @@
      * stderr when doing things like 'squid -k reconfigure'
      */
     if (MemPools::GetInstance().idleLimit() > new_pool_limit)
-        debugs(13, 1, "Shrinking idle mem pools to "<< std::setprecision(3) << toMB(new_pool_limit) << " MB");
+        debugs(13, DBG_IMPORTANT, "Shrinking idle mem pools to "<< std::setprecision(3) << toMB(new_pool_limit) << " MB");
 #endif
 
     MemPools::GetInstance().setIdleLimit(new_pool_limit);
@@ -467,7 +467,7 @@
         StrPools[i].pool->zeroOnPush(false);
 
         if (StrPools[i].pool->objectSize() != StrPoolsAttrs[i].obj_size)
-            debugs(13, 1, "Notice: " << StrPoolsAttrs[i].name << " is " << StrPools[i].pool->objectSize() << " bytes instead of requested " << StrPoolsAttrs[i].obj_size << " bytes");
+            debugs(13, DBG_IMPORTANT, "Notice: " << StrPoolsAttrs[i].name << " is " << StrPools[i].pool->objectSize() << " bytes instead of requested " << StrPoolsAttrs[i].obj_size << " bytes");
     }
 
     MemIsInitialized = true;

=== modified file 'src/mime.cc'
--- src/mime.cc	2012-01-20 18:55:04 +0000
+++ src/mime.cc	2012-08-02 21:18:43 +0000
@@ -276,7 +276,7 @@
         return;
 
     if ((fp = fopen(filename, "r")) == NULL) {
-        debugs(25, 1, "mimeInit: " << filename << ": " << xstrerror());
+        debugs(25, DBG_IMPORTANT, "mimeInit: " << filename << ": " << xstrerror());
         return;
     }
 
@@ -302,27 +302,27 @@
         xstrncpy(chopbuf, buf, BUFSIZ);
 
         if ((pattern = strtok(chopbuf, w_space)) == NULL) {
-            debugs(25, 1, "mimeInit: parse error: '" << buf << "'");
+            debugs(25, DBG_IMPORTANT, "mimeInit: parse error: '" << buf << "'");
             continue;
         }
 
         if ((type = strtok(NULL, w_space)) == NULL) {
-            debugs(25, 1, "mimeInit: parse error: '" << buf << "'");
+            debugs(25, DBG_IMPORTANT, "mimeInit: parse error: '" << buf << "'");
             continue;
         }
 
         if ((icon = strtok(NULL, w_space)) == NULL) {
-            debugs(25, 1, "mimeInit: parse error: '" << buf << "'");
+            debugs(25, DBG_IMPORTANT, "mimeInit: parse error: '" << buf << "'");
             continue;
         }
 
         if ((encoding = strtok(NULL, w_space)) == NULL) {
-            debugs(25, 1, "mimeInit: parse error: '" << buf << "'");
+            debugs(25, DBG_IMPORTANT, "mimeInit: parse error: '" << buf << "'");
             continue;
         }
 
         if ((mode = strtok(NULL, w_space)) == NULL) {
-            debugs(25, 1, "mimeInit: parse error: '" << buf << "'");
+            debugs(25, DBG_IMPORTANT, "mimeInit: parse error: '" << buf << "'");
             continue;
         }
 
@@ -335,11 +335,11 @@
             else if (!strcmp(option, "+view"))
                 view_option = 1;
             else
-                debugs(25, 1, "mimeInit: unknown option: '" << buf << "' (" << option << ")");
+                debugs(25, DBG_IMPORTANT, "mimeInit: unknown option: '" << buf << "' (" << option << ")");
         }
 
         if (regcomp(&re, pattern, re_flags) != 0) {
-            debugs(25, 1, "mimeInit: regcomp error: '" << buf << "'");
+            debugs(25, DBG_IMPORTANT, "mimeInit: regcomp error: '" << buf << "'");
             continue;
         }
 
@@ -376,7 +376,7 @@
     for (m = MimeTable; m != NULL; m = m->next)
         m->theIcon.load();
 
-    debugs(25, 1, "Loaded Icons.");
+    debugs(25, DBG_IMPORTANT, "Loaded Icons.");
 }
 
 void
@@ -433,12 +433,12 @@
     fd = file_open(path, O_RDONLY | O_BINARY);
 
     if (fd < 0) {
-        debugs(25, 0, "mimeLoadIconFile: " << path << ": " << xstrerror());
+        debugs(25, DBG_CRITICAL, "mimeLoadIconFile: " << path << ": " << xstrerror());
         return;
     }
 
     if (fstat(fd, &sb) < 0) {
-        debugs(25, 0, "mimeLoadIconFile: FD " << fd << ": fstat: " << xstrerror());
+        debugs(25, DBG_CRITICAL, "mimeLoadIconFile: FD " << fd << ": fstat: " << xstrerror());
         file_close(fd);
         return;
     }

=== modified file 'src/multicast.cc'
--- src/multicast.cc	2012-07-17 17:38:50 +0000
+++ src/multicast.cc	2012-08-02 21:18:43 +0000
@@ -46,7 +46,7 @@
     char ttl = (char) mcast_ttl;
 
     if (setsockopt(fd, IPPROTO_IP, IP_MULTICAST_TTL, &ttl, 1) < 0)
-        debugs(50, 1, "comm_set_mcast_ttl: FD " << fd << ", TTL: " << mcast_ttl << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "comm_set_mcast_ttl: FD " << fd << ", TTL: " << mcast_ttl << ": " << xstrerror());
 
 #endif
 
@@ -61,7 +61,7 @@
     int i;
 
     if (ia == NULL) {
-        debugs(7, 0, "comm_join_mcast_groups: Unknown host");
+        debugs(7, DBG_CRITICAL, "comm_join_mcast_groups: Unknown host");
         return;
     }
 

=== modified file 'src/neighbors.cc'
--- src/neighbors.cc	2012-07-20 15:31:04 +0000
+++ src/neighbors.cc	2012-08-02 21:18:43 +0000
@@ -442,7 +442,7 @@
 peerAlive(peer *p)
 {
     if (p->stats.logged_state == PEER_DEAD && p->tcp_up) {
-        debugs(15, 1, "Detected REVIVED " << neighborTypeStr(p) << ": " << p->name);
+        debugs(15, DBG_IMPORTANT, "Detected REVIVED " << neighborTypeStr(p) << ": " << p->name);
         p->stats.logged_state = PEER_ALIVE;
         peerClearRR();
     }
@@ -681,7 +681,7 @@
             /* log it once at the threshold */
 
             if (p->stats.logged_state == PEER_ALIVE) {
-                debugs(15, 1, "Detected DEAD " << neighborTypeStr(p) << ": " << p->name);
+                debugs(15, DBG_IMPORTANT, "Detected DEAD " << neighborTypeStr(p) << ": " << p->name);
                 p->stats.logged_state = PEER_DEAD;
             }
         }
@@ -942,7 +942,7 @@
     ++ np->icp.counts[opcode];
 
     if (isPowTen(++np->stats.ignored_replies))
-        debugs(15, 1, "WARNING: Ignored " << np->stats.ignored_replies << " replies from non-peer " << np->host);
+        debugs(15, DBG_IMPORTANT, "WARNING: Ignored " << np->stats.ignored_replies << " replies from non-peer " << np->host);
 }
 
 /* ignoreMulticastReply
@@ -1026,7 +1026,7 @@
 
     if (entry->lock_count == 0) {
         // TODO: many entries are unlocked; why is this reported at level 1?
-        debugs(12, 1, "neighborsUdpAck: '" << storeKeyText(key) << "' has no locks");
+        debugs(12, DBG_IMPORTANT, "neighborsUdpAck: '" << storeKeyText(key) << "' has no locks");
         neighborCountIgnored(p);
         return;
     }
@@ -1063,18 +1063,18 @@
         }
     } else if (opcode == ICP_SECHO) {
         if (p) {
-            debugs(15, 1, "Ignoring SECHO from neighbor " << p->host);
+            debugs(15, DBG_IMPORTANT, "Ignoring SECHO from neighbor " << p->host);
             neighborCountIgnored(p);
         } else {
-            debugs(15, 1, "Unsolicited SECHO from " << from);
+            debugs(15, DBG_IMPORTANT, "Unsolicited SECHO from " << from);
         }
     } else if (opcode == ICP_DENIED) {
         if (p == NULL) {
             neighborIgnoreNonPeer(from, opcode);
         } else if (p->stats.pings_acked > 100) {
             if (100 * p->icp.counts[ICP_DENIED] / p->stats.pings_acked > 95) {
-                debugs(15, 0, "95%% of replies from '" << p->host << "' are UDP_DENIED");
-                debugs(15, 0, "Disabling '" << p->host << "', please check your configuration.");
+                debugs(15, DBG_CRITICAL, "95%% of replies from '" << p->host << "' are UDP_DENIED");
+                debugs(15, DBG_CRITICAL, "Disabling '" << p->host << "', please check your configuration.");
                 neighborRemove(p);
                 p = NULL;
             } else {
@@ -1084,7 +1084,7 @@
     } else if (opcode == ICP_MISS_NOFETCH) {
         mem->ping_reply_callback(p, ntype, AnyP::PROTO_ICP, header, mem->ircb_data);
     } else {
-        debugs(15, 0, "neighborsUdpAck: Unexpected ICP reply: " << opcode_d);
+        debugs(15, DBG_CRITICAL, "neighborsUdpAck: Unexpected ICP reply: " << opcode_d);
     }
 }
 
@@ -1194,21 +1194,21 @@
     int j;
 
     if (p->n_addresses == 0) {
-        debugs(15, 1, "Configuring " << neighborTypeStr(p) << " " << p->host << "/" << p->http_port << "/" << p->icp.port);
+        debugs(15, DBG_IMPORTANT, "Configuring " << neighborTypeStr(p) << " " << p->host << "/" << p->http_port << "/" << p->icp.port);
 
         if (p->type == PEER_MULTICAST)
-            debugs(15, 1, "    Multicast TTL = " << p->mcast.ttl);
+            debugs(15, DBG_IMPORTANT, "    Multicast TTL = " << p->mcast.ttl);
     }
 
     p->n_addresses = 0;
 
     if (ia == NULL) {
-        debugs(0, 0, "WARNING: DNS lookup for '" << p->host << "' failed!");
+        debugs(0, DBG_CRITICAL, "WARNING: DNS lookup for '" << p->host << "' failed!");
         return;
     }
 
     if ((int) ia->count < 1) {
-        debugs(0, 0, "WARNING: No IP address found for '" << p->host << "'!");
+        debugs(0, DBG_CRITICAL, "WARNING: No IP address found for '" << p->host << "'!");
         return;
     }
 
@@ -1270,7 +1270,7 @@
     -- p->tcp_up;
 
     if (!p->tcp_up) {
-        debugs(15, 1, "Detected DEAD " << neighborTypeStr(p) << ": " << p->name);
+        debugs(15, DBG_IMPORTANT, "Detected DEAD " << neighborTypeStr(p) << ": " << p->name);
         p->stats.logged_state = PEER_DEAD;
     }
 }
@@ -1278,7 +1278,7 @@
 void
 peerConnectFailed(peer *p)
 {
-    debugs(15, 1, "TCP connection to " << p->host << "/" << p->http_port << " failed");
+    debugs(15, DBG_IMPORTANT, "TCP connection to " << p->host << "/" << p->http_port << " failed");
     peerConnectFailedSilent(p);
 }
 
@@ -1412,7 +1412,7 @@
         peer *p = (peer *)psstate->callback_data;
         p->mcast.flags.counting = 0;
         p->mcast.avg_n_members = Math::doubleAverage(p->mcast.avg_n_members, (double) psstate->ping.n_recv, ++p->mcast.n_times_counted, 10);
-        debugs(15, 1, "Group " << p->host  << ": " << psstate->ping.n_recv  <<
+        debugs(15, DBG_IMPORTANT, "Group " << p->host  << ": " << psstate->ping.n_recv  <<
                " replies, "<< std::setw(4)<< std::setprecision(2) <<
                p->mcast.avg_n_members <<" average, RTT " << p->stats.rtt);
         p->mcast.n_replies_expected = (int) p->mcast.avg_n_members;
@@ -1730,7 +1730,7 @@
 
     if (e->lock_count == 0) {
         // TODO: many entries are unlocked; why is this reported at level 1?
-        debugs(12, 1, "neighborsUdpAck: '" << storeKeyText(key) << "' has no locks");
+        debugs(12, DBG_IMPORTANT, "neighborsUdpAck: '" << storeKeyText(key) << "' has no locks");
         neighborCountIgnored(p);
         return;
     }

=== modified file 'src/pconn.cc'
--- src/pconn.cc	2012-07-23 19:37:47 +0000
+++ src/pconn.cc	2012-08-02 21:18:43 +0000
@@ -481,7 +481,7 @@
 {
     pools = (PconnPool **) xcalloc(MAX_NUM_PCONN_POOLS, sizeof(*pools));
 //TODO: re-link to MemPools. WAS:    pconn_fds_pool = memPoolCreate("pconn_fds", PCONN_FDS_SZ * sizeof(int));
-    debugs(48, 0, "persistent connection module initialized");
+    debugs(48, DBG_CRITICAL, "persistent connection module initialized");
     registerWithCacheManager();
 }
 

=== modified file 'src/peer_digest.cc'
--- src/peer_digest.cc	2012-01-20 18:55:04 +0000
+++ src/peer_digest.cc	2012-08-02 21:18:43 +0000
@@ -634,7 +634,7 @@
         assert (fetch->entry->getReply()->sline.status != 0);
 
         if (fetch->entry->getReply()->sline.status != HTTP_OK) {
-            debugs(72, 1, "peerDigestSwapInHeaders: " << fetch->pd->host <<
+            debugs(72, DBG_IMPORTANT, "peerDigestSwapInHeaders: " << fetch->pd->host <<
                    " status " << fetch->entry->getReply()->sline.status <<
                    " got cached!");
 
@@ -882,7 +882,7 @@
     pd->stats.recv.msgs += fetch->recv.msg;
 
     if (err) {
-        debugs(72, 1, "" << (pcb_valid ? "temporary " : "" ) << "disabling (" << pd->req_result << ") digest from " << host);
+        debugs(72, DBG_IMPORTANT, "" << (pcb_valid ? "temporary " : "" ) << "disabling (" << pd->req_result << ") digest from " << host);
 
         if (pd->cd) {
             cacheDigestDestroy(pd->cd);
@@ -1007,14 +1007,14 @@
     /* check version requirements (both ways) */
 
     if (cblock.ver.required > CacheDigestVer.current) {
-        debugs(72, 1, "" << host << " digest requires version " <<
+        debugs(72, DBG_IMPORTANT, "" << host << " digest requires version " <<
                cblock.ver.required << "; have: " << CacheDigestVer.current);
 
         return 0;
     }
 
     if (cblock.ver.current < CacheDigestVer.required) {
-        debugs(72, 1, "" << host << " digest is version " <<
+        debugs(72, DBG_IMPORTANT, "" << host << " digest is version " <<
                cblock.ver.current << "; we require: " <<
                CacheDigestVer.required);
 
@@ -1025,13 +1025,13 @@
     if (cblock.ver.required > cblock.ver.current ||
             cblock.mask_size <= 0 || cblock.capacity <= 0 ||
             cblock.bits_per_entry <= 0 || cblock.hash_func_count <= 0) {
-        debugs(72, 0, "" << host << " digest cblock is corrupted.");
+        debugs(72, DBG_CRITICAL, "" << host << " digest cblock is corrupted.");
         return 0;
     }
 
     /* check consistency further */
     if ((size_t)cblock.mask_size != cacheDigestCalcMaskSize(cblock.capacity, cblock.bits_per_entry)) {
-        debugs(72, 0, host << " digest cblock is corrupted " <<
+        debugs(72, DBG_CRITICAL, host << " digest cblock is corrupted " <<
                "(mask size mismatch: " << cblock.mask_size << " ? " <<
                cacheDigestCalcMaskSize(cblock.capacity, cblock.bits_per_entry)
                << ").");
@@ -1040,7 +1040,7 @@
 
     /* there are some things we cannot do yet */
     if (cblock.hash_func_count != CacheDigestHashFuncCount) {
-        debugs(72, 0, "" << host << " digest: unsupported #hash functions: " <<
+        debugs(72, DBG_CRITICAL, "" << host << " digest: unsupported #hash functions: " <<
                cblock.hash_func_count << " ? " << CacheDigestHashFuncCount << ".");
         return 0;
     }
@@ -1080,7 +1080,7 @@
     const int bit_util = cacheDigestBitUtil(pd->cd);
 
     if (bit_util > 65) {
-        debugs(72, 0, "Warning: " << pd->host <<
+        debugs(72, DBG_CRITICAL, "Warning: " << pd->host <<
                " peer digest has too many bits on (" << bit_util << "%%).");
 
         return 0;

=== modified file 'src/peer_select.cc'
--- src/peer_select.cc	2012-07-29 08:15:17 +0000
+++ src/peer_select.cc	2012-08-02 21:18:43 +0000
@@ -93,7 +93,7 @@
     }
 
     if (psstate->acl_checklist) {
-        debugs(44, 1, "calling aclChecklistFree() from peerSelectStateFree");
+        debugs(44, DBG_IMPORTANT, "calling aclChecklistFree() from peerSelectStateFree");
         delete (psstate->acl_checklist);
     }
 
@@ -561,7 +561,7 @@
                                                &ps->ping.timeout);
 
             if (ps->ping.n_sent == 0)
-                debugs(44, 0, "WARNING: neighborsUdpPing returned 0");
+                debugs(44, DBG_CRITICAL, "WARNING: neighborsUdpPing returned 0");
             debugs(44, 3, "peerSelect: " << ps->ping.n_replies_expected <<
                    " ICP replies expected, RTT " << ps->ping.timeout <<
                    " msec");
@@ -899,7 +899,7 @@
 #endif
 
     else
-        debugs(44, 1, "peerHandlePingReply: unknown protocol " << proto);
+        debugs(44, DBG_IMPORTANT, "peerHandlePingReply: unknown protocol " << proto);
 }
 
 static void

=== modified file 'src/repl/heap/store_repl_heap.cc'
--- src/repl/heap/store_repl_heap.cc	2012-01-20 18:55:04 +0000
+++ src/repl/heap/store_repl_heap.cc	2012-08-02 21:18:43 +0000
@@ -320,7 +320,7 @@
         keytype = args->key;
         args = args->next;
     } else {
-        debugs(81, 1, "createRemovalPolicy_heap: No key type specified. Using LRU");
+        debugs(81, DBG_IMPORTANT, "createRemovalPolicy_heap: No key type specified. Using LRU");
         keytype = "LRU";
     }
 
@@ -331,7 +331,7 @@
     else if (!strcmp(keytype, "LRU"))
         heap_data->keyfunc = HeapKeyGen_StoreEntry_LRU;
     else {
-        debugs(81, 0, "createRemovalPolicy_heap: Unknown key type \"" << keytype << "\". Using LRU");
+        debugs(81, DBG_CRITICAL, "createRemovalPolicy_heap: Unknown key type \"" << keytype << "\". Using LRU");
         heap_data->keyfunc = HeapKeyGen_StoreEntry_LRU;
     }
 

=== modified file 'src/send-announce.cc'
--- src/send-announce.cc	2012-01-20 18:55:04 +0000
+++ src/send-announce.cc	2012-08-02 21:10:18 +0000
@@ -71,11 +71,11 @@
     int fd;
 
     if (ia == NULL) {
-        debugs(27, 1, "send_announce: Unknown host '" << host << "'");
+        debugs(27, DBG_IMPORTANT, "send_announce: Unknown host '" << host << "'");
         return;
     }
 
-    debugs(27, 1, "Sending Announcement to " << host);
+    debugs(27, DBG_IMPORTANT, "Sending Announcement to " << host);
     sndbuf[0] = '\0';
     snprintf(tbuf, 256, "cache_version SQUID/%s\n", version_string);
     strcat(sndbuf, tbuf);
@@ -106,7 +106,7 @@
             sndbuf[l] = '\0';
             file_close(fd);
         } else {
-            debugs(50, 1, "send_announce: " << file << ": " << xstrerror());
+            debugs(50, DBG_IMPORTANT, "send_announce: " << file << ": " << xstrerror());
         }
     }
 
@@ -115,5 +115,5 @@
     assert(Comm::IsConnOpen(icpOutgoingConn));
 
     if (comm_udp_sendto(icpOutgoingConn->fd, S, sndbuf, strlen(sndbuf) + 1) < 0)
-        debugs(27, 1, "ERROR: Failed to announce to " << S << " from " << icpOutgoingConn->local << ": " << xstrerror());
+        debugs(27, DBG_IMPORTANT, "ERROR: Failed to announce to " << S << " from " << icpOutgoingConn->local << ": " << xstrerror());
 }

=== modified file 'src/snmp_core.cc'
--- src/snmp_core.cc	2012-07-23 19:37:47 +0000
+++ src/snmp_core.cc	2012-08-02 21:10:18 +0000
@@ -387,7 +387,7 @@
         xfree(snmp_rq->outbuf);
         xfree(snmp_rq);
     } else {
-        debugs(49, 1, "snmpHandleUdp: FD " << sock << " recvfrom: " << xstrerror());
+        debugs(49, DBG_IMPORTANT, "snmpHandleUdp: FD " << sock << " recvfrom: " << xstrerror());
     }
 }
 

=== modified file 'src/ssl/helper.cc'
--- src/ssl/helper.cc	2012-06-07 17:46:16 +0000
+++ src/ssl/helper.cc	2012-08-02 21:10:18 +0000
@@ -93,7 +93,7 @@
             first_warn = squid_curtime;
         if (squid_curtime - first_warn > 3 * 60)
             fatal("SSL servers not responding for 3 minutes");
-        debugs(34, 1, HERE << "Queue overload, rejecting");
+        debugs(34, DBG_IMPORTANT, HERE << "Queue overload, rejecting");
         callback(data, (char *)"error 45 Temporary network problem, please retry later");
         return;
     }

=== modified file 'src/ssl/support.cc'
--- src/ssl/support.cc	2012-07-23 07:02:06 +0000
+++ src/ssl/support.cc	2012-08-02 21:10:18 +0000
@@ -125,12 +125,12 @@
         break;
 
     default:
-        debugs(83, 1, "ssl_temp_rsa_cb: Unexpected key length " << keylen);
+        debugs(83, DBG_IMPORTANT, "ssl_temp_rsa_cb: Unexpected key length " << keylen);
         return NULL;
     }
 
     if (rsa == NULL) {
-        debugs(83, 1, "ssl_temp_rsa_cb: Failed to generate key " << keylen);
+        debugs(83, DBG_IMPORTANT, "ssl_temp_rsa_cb: Failed to generate key " << keylen);
         return NULL;
     }
 
@@ -138,7 +138,7 @@
         if (do_debug(83, 5))
             PEM_write_RSAPrivateKey(debug_log, rsa, NULL, NULL, 0, NULL, NULL);
 
-        debugs(83, 1, "Generated ephemeral RSA key of length " << keylen);
+        debugs(83, DBG_IMPORTANT, "Generated ephemeral RSA key of length " << keylen);
     }
 
     return rsa;
@@ -1017,7 +1017,7 @@
     }
 
     if (certfile) {
-        debugs(83, 1, "Using certificate in " << certfile);
+        debugs(83, DBG_IMPORTANT, "Using certificate in " << certfile);
 
         if (!SSL_CTX_use_certificate_chain_file(sslContext, certfile)) {
             ssl_error = ERR_get_error();
@@ -1025,7 +1025,7 @@
                    certfile, ERR_error_string(ssl_error, NULL));
         }
 
-        debugs(83, 1, "Using private key in " << keyfile);
+        debugs(83, DBG_IMPORTANT, "Using private key in " << keyfile);
         ssl_ask_password(sslContext, keyfile);
 
         if (!SSL_CTX_use_PrivateKey_file(sslContext, keyfile, SSL_FILETYPE_PEM)) {
@@ -1150,7 +1150,7 @@
     nid = OBJ_txt2nid((char *) attribute_name);
 
     if (nid == 0) {
-        debugs(83, 1, "WARNING: Unknown SSL attribute name '" << attribute_name << "'");
+        debugs(83, DBG_IMPORTANT, "WARNING: Unknown SSL attribute name '" << attribute_name << "'");
         return NULL;
     }
 

=== modified file 'src/stat.cc'
--- src/stat.cc	2012-07-18 15:47:58 +0000
+++ src/stat.cc	2012-08-02 21:18:43 +0000
@@ -1076,7 +1076,7 @@
 
         l = &CountHourHist[hours];
     } else {
-        debugs(18, 1, "statAvgDump: Invalid args, minutes=" << minutes << ", hours=" << hours);
+        debugs(18, DBG_IMPORTANT, "statAvgDump: Invalid args, minutes=" << minutes << ", hours=" << hours);
         return;
     }
 
@@ -1436,7 +1436,7 @@
         int i = (int) statPctileSvc(0.5, 20, PCTILE_HTTP);
 
         if (Config.warnings.high_rptm < i)
-            debugs(18, 0, "WARNING: Median response time is " << i << " milliseconds");
+            debugs(18, DBG_CRITICAL, "WARNING: Median response time is " << i << " milliseconds");
     }
 
     if (Config.warnings.high_pf) {
@@ -1447,7 +1447,7 @@
             i /= (int) dt;
 
             if (Config.warnings.high_pf < i)
-                debugs(18, 0, "WARNING: Page faults occuring at " << i << "/sec");
+                debugs(18, DBG_CRITICAL, "WARNING: Page faults occuring at " << i << "/sec");
         }
     }
 
@@ -1467,7 +1467,7 @@
 #endif
 
         if (Config.warnings.high_memory < i)
-            debugs(18, 0, "WARNING: Memory usage at " << ((unsigned long int)(i >> 20)) << " MB");
+            debugs(18, DBG_CRITICAL, "WARNING: Memory usage at " << ((unsigned long int)(i >> 20)) << " MB");
     }
 }
 
@@ -1984,7 +1984,7 @@
     cd = CountHist[0].cd.kbytes_recv.kb - CountHist[minutes].cd.kbytes_recv.kb;
 
     if (s < cd)
-        debugs(18, 1, "STRANGE: srv_kbytes=" << s << ", cd_kbytes=" << cd);
+        debugs(18, DBG_IMPORTANT, "STRANGE: srv_kbytes=" << s << ", cd_kbytes=" << cd);
 
     s -= cd;
 

=== modified file 'src/stmem.cc'
--- src/stmem.cc	2012-01-20 18:55:04 +0000
+++ src/stmem.cc	2012-08-02 21:18:43 +0000
@@ -92,7 +92,7 @@
 mem_hdr::unlink(mem_node *aNode)
 {
     if (aNode->write_pending) {
-        debugs(0, 0, "cannot unlink mem_node " << aNode << " while write_pending");
+        debugs(0, DBG_CRITICAL, "cannot unlink mem_node " << aNode << " while write_pending");
         return false;
     }
 
@@ -255,7 +255,7 @@
     /* we shouldn't ever ask for absent offsets */
 
     if (nodes.size() == 0) {
-        debugs(19, 1, "mem_hdr::copy: No data to read");
+        debugs(19, DBG_IMPORTANT, "mem_hdr::copy: No data to read");
         debugDump();
         assert (0);
         return 0;
@@ -268,7 +268,7 @@
     mem_node *p = getBlockContainingLocation(target.offset);
 
     if (!p) {
-        debugs(19, 1, "memCopy: could not find start of " << target.range() <<
+        debugs(19, DBG_IMPORTANT, "memCopy: could not find start of " << target.range() <<
                " in memory.");
         debugDump();
         fatal("Squid has attempted to read data from memory that is not present. This is an indication of of (pre-3.0) code that hasn't been updated to deal with sparse objects in memory. Squid should coredump.allowing to review the cause. Immediately preceeding this message is a dump of the available data in the format [start,end). The [ means from the value, the ) means up to the value. I.e. [1,5) means that there are 4 bytes of data, at offsets 1,2,3,4.\n");
@@ -369,7 +369,7 @@
     debugs(19, 6, "mem_hdr::write: " << this << " " << writeBuffer.range() << " object end " << endOffset());
 
     if (unionNotEmpty(writeBuffer)) {
-        debugs(19,0,"mem_hdr::write: writeBuffer: " << writeBuffer.range());
+        debugs(19, DBG_CRITICAL, "mem_hdr::write: writeBuffer: " << writeBuffer.range());
         debugDump();
         fatal("Attempt to overwrite already in-memory data. Preceeding this there should be a mem_hdr::write output that lists the attempted write, and the currently present data. Please get a 'backtrace full' from this error - using the generated core, and file a bug report with the squid developers including the last 10 lines of cache.log and the backtrace.\n");
         PROF_stop(mem_hdr_write);
@@ -424,8 +424,8 @@
 void
 mem_hdr::dump() const
 {
-    debugs(20, 1, "mem_hdr: " << (void *)this << " nodes.start() " << nodes.start());
-    debugs(20, 1, "mem_hdr: " << (void *)this << " nodes.finish() " << nodes.finish());
+    debugs(20, DBG_IMPORTANT, "mem_hdr: " << (void *)this << " nodes.start() " << nodes.start());
+    debugs(20, DBG_IMPORTANT, "mem_hdr: " << (void *)this << " nodes.finish() " << nodes.finish());
 }
 
 size_t

=== modified file 'src/store.cc'
--- src/store.cc	2012-07-23 07:02:06 +0000
+++ src/store.cc	2012-08-02 21:18:43 +0000
@@ -323,7 +323,7 @@
 
     if (EBIT_TEST(flags, ENTRY_ABORTED)) {
         /* I don't think we should be adding clients to aborted entries */
-        debugs(20, 1, "storeClientType: adding to ENTRY_ABORTED entry");
+        debugs(20, DBG_IMPORTANT, "storeClientType: adding to ENTRY_ABORTED entry");
         return STORE_MEM_CLIENT;
     }
 
@@ -572,7 +572,7 @@
     }
 
     if (EBIT_TEST(flags, KEY_PRIVATE))
-        debugs(20, 1, "WARNING: " << __FILE__ << ":" << __LINE__ << ": found KEY_PRIVATE");
+        debugs(20, DBG_IMPORTANT, "WARNING: " << __FILE__ << ":" << __LINE__ << ": found KEY_PRIVATE");
 
     Store::Root().handleIdleEntry(*this); // may delete us
     return 0;
@@ -709,7 +709,7 @@
 #if MORE_DEBUG_OUTPUT
 
     if (EBIT_TEST(flags, RELEASE_REQUEST))
-        debugs(20, 1, "assertion failed: RELEASE key " << key << ", url " << mem_obj->url);
+        debugs(20, DBG_IMPORTANT, "assertion failed: RELEASE key " << key << ", url " << mem_obj->url);
 
 #endif
 
@@ -1131,7 +1131,7 @@
      */
     if (mem_obj->abort.callback) {
         if (!cbdataReferenceValid(mem_obj->abort.data))
-            debugs(20,1,HERE << "queueing event when abort.data is not valid");
+            debugs(20, DBG_IMPORTANT,HERE << "queueing event when abort.data is not valid");
         eventAdd("mem_obj->abort.callback",
                  mem_obj->abort.callback,
                  mem_obj->abort.data,
@@ -1320,7 +1320,7 @@
 
         if (e == NULL) {
             /* done! */
-            debugs(20, 1, "storeLateRelease: released " << n << " objects");
+            debugs(20, DBG_IMPORTANT, "storeLateRelease: released " << n << " objects");
             return;
         }
 
@@ -1763,7 +1763,7 @@
     /* find the number of currently known repl types */
     for (i = 0; storerepl_list && storerepl_list[i].typestr; ++i) {
         if (strcmp(storerepl_list[i].typestr, type) == 0) {
-            debugs(20, 1, "WARNING: Trying to load store replacement policy " << type << " twice.");
+            debugs(20, DBG_IMPORTANT, "WARNING: Trying to load store replacement policy " << type << " twice.");
             return;
         }
     }
@@ -1791,9 +1791,9 @@
             return r->create(settings->args);
     }
 
-    debugs(20, 1, "ERROR: Unknown policy " << settings->type);
-    debugs(20, 1, "ERROR: Be sure to have set cache_replacement_policy");
-    debugs(20, 1, "ERROR:   and memory_replacement_policy in squid.conf!");
+    debugs(20, DBG_IMPORTANT, "ERROR: Unknown policy " << settings->type);
+    debugs(20, DBG_IMPORTANT, "ERROR: Be sure to have set cache_replacement_policy");
+    debugs(20, DBG_IMPORTANT, "ERROR:   and memory_replacement_policy in squid.conf!");
     fatalf("ERROR: Unknown policy %s\n", settings->type);
     return NULL;                /* NOTREACHED */
 }
@@ -1830,7 +1830,7 @@
     debugs(20, 3, "StoreEntry::replaceHttpReply: " << url());
 
     if (!mem_obj) {
-        debugs(20, 0, "Attempt to replace object with no in-memory representation");
+        debugs(20, DBG_CRITICAL, "Attempt to replace object with no in-memory representation");
         return;
     }
 

=== modified file 'src/store_client.cc'
--- src/store_client.cc	2012-07-20 15:31:04 +0000
+++ src/store_client.cc	2012-08-02 21:18:43 +0000
@@ -412,7 +412,7 @@
 
         return;
     } else {
-        debugs(90, 1, "WARNING: Averted multiple fd operation (1)");
+        debugs(90, DBG_IMPORTANT, "WARNING: Averted multiple fd operation (1)");
         flags.store_copying = 0;
         return;
     }
@@ -498,7 +498,7 @@
         HttpReply *rep = (HttpReply *) entry->getReply(); // bypass const
 
         if (!rep->parseCharBuf(copyInto.data, headersEnd(copyInto.data, len))) {
-            debugs(90, 0, "Could not parse headers from on disk object");
+            debugs(90, DBG_CRITICAL, "Could not parse headers from on disk object");
         } else {
             parsed_header = 1;
         }
@@ -571,7 +571,7 @@
 
     if (!aBuilder.isBufferSane()) {
         /* oops, bad disk file? */
-        debugs(90, 1, "WARNING: swapfile header inconsistent with available data");
+        debugs(90, DBG_IMPORTANT, "WARNING: swapfile header inconsistent with available data");
         fail();
         return;
     }
@@ -579,7 +579,7 @@
     tlv *tlv_list = aBuilder.createStoreMeta ();
 
     if (tlv_list == NULL) {
-        debugs(90, 1, "WARNING: failed to unpack meta data");
+        debugs(90, DBG_IMPORTANT, "WARNING: failed to unpack meta data");
         fail();
         return;
     }

=== modified file 'src/store_digest.cc'
--- src/store_digest.cc	2012-07-18 15:47:58 +0000
+++ src/store_digest.cc	2012-08-02 21:10:18 +0000
@@ -125,7 +125,7 @@
     }
 
     store_digest = cacheDigestCreate(cap, Config.digest.bits_per_entry);
-    debugs(71, 1, "Local cache digest enabled; rebuild/rewrite every " <<
+    debugs(71, DBG_IMPORTANT, "Local cache digest enabled; rebuild/rewrite every " <<
            (int) Config.digest.rebuild_period << "/" <<
            (int) Config.digest.rewrite_period << " sec");
 
@@ -299,7 +299,7 @@
     /* prevent overlapping if rebuild schedule is too tight */
 
     if (sd_state.rebuild_lock) {
-        debugs(71, 1, "storeDigestRebuildStart: overlap detected, consider increasing rebuild period");
+        debugs(71, DBG_IMPORTANT, "storeDigestRebuildStart: overlap detected, consider increasing rebuild period");
         return;
     }
 
@@ -381,7 +381,7 @@
     /* prevent overlapping if rewrite schedule is too tight */
 
     if (sd_state.rewrite_lock) {
-        debugs(71, 1, "storeDigestRewrite: overlap detected, consider increasing rewrite period");
+        debugs(71, DBG_IMPORTANT, "storeDigestRewrite: overlap detected, consider increasing rewrite period");
         return;
     }
 

=== modified file 'src/store_dir.cc'
--- src/store_dir.cc	2012-08-01 11:54:23 +0000
+++ src/store_dir.cc	2012-08-02 21:10:18 +0000
@@ -101,10 +101,10 @@
 
     if (0 == strcasecmp(Config.store_dir_select_algorithm, "round-robin")) {
         storeDirSelectSwapDir = storeDirSelectSwapDirRoundRobin;
-        debugs(47, 1, "Using Round Robin store dir selection");
+        debugs(47, DBG_IMPORTANT, "Using Round Robin store dir selection");
     } else {
         storeDirSelectSwapDir = storeDirSelectSwapDirLeastLoad;
-        debugs(47, 1, "Using Least Load store dir selection");
+        debugs(47, DBG_IMPORTANT, "Using Least Load store dir selection");
     }
 }
 
@@ -408,7 +408,7 @@
 
     max_size = currentSize();
 
-    debugs(20, 1, "WARNING: Shrinking cache_dir #" << index << " to " << currentSize() / 1024.0 << " KB");
+    debugs(20, DBG_IMPORTANT, "WARNING: Shrinking cache_dir #" << index << " to " << currentSize() / 1024.0 << " KB");
 }
 
 void
@@ -447,12 +447,12 @@
     int notdone = 1;
 
     if (StoreController::store_dirs_rebuilding) {
-        debugs(20, 1, "Not currently OK to rewrite swap log.");
-        debugs(20, 1, "storeDirWriteCleanLogs: Operation aborted.");
+        debugs(20, DBG_IMPORTANT, "Not currently OK to rewrite swap log.");
+        debugs(20, DBG_IMPORTANT, "storeDirWriteCleanLogs: Operation aborted.");
         return 0;
     }
 
-    debugs(20, 1, "storeDirWriteCleanLogs: Starting...");
+    debugs(20, DBG_IMPORTANT, "storeDirWriteCleanLogs: Starting...");
     getCurrentTime();
     start = current_time;
 
@@ -460,7 +460,7 @@
         sd = dynamic_cast<SwapDir *>(INDEXSD(dirn));
 
         if (sd->writeCleanStart() < 0) {
-            debugs(20, 1, "log.clean.start() failed for dir #" << sd->index);
+            debugs(20, DBG_IMPORTANT, "log.clean.start() failed for dir #" << sd->index);
             continue;
         }
     }
@@ -493,7 +493,7 @@
 
             if ((++n & 0xFFFF) == 0) {
                 getCurrentTime();
-                debugs(20, 1, "  " << std::setw(7) << n  <<
+                debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << n  <<
                        " entries written so far.");
             }
         }
@@ -510,8 +510,8 @@
 
     dt = tvSubDsec(start, current_time);
 
-    debugs(20, 1, "  Finished.  Wrote " << n << " entries.");
-    debugs(20, 1, "  Took "<< std::setw(3)<< std::setprecision(2) << dt <<
+    debugs(20, DBG_IMPORTANT, "  Finished.  Wrote " << n << " entries.");
+    debugs(20, DBG_IMPORTANT, "  Took "<< std::setw(3)<< std::setprecision(2) << dt <<
            " seconds ("<< std::setw(6) << ((double) n / (dt > 0.0 ? dt : 1.0)) << " entries/sec).");
 
 
@@ -572,7 +572,7 @@
     struct statvfs sfs;
 
     if (statvfs(path, &sfs)) {
-        debugs(50, 1, "" << path << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "" << path << ": " << xstrerror());
         *blksize = 2048;
         return 1;
     }
@@ -583,7 +583,7 @@
     struct statfs sfs;
 
     if (statfs(path, &sfs)) {
-        debugs(50, 1, "" << path << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "" << path << ": " << xstrerror());
         *blksize = 2048;
         return 1;
     }
@@ -611,7 +611,7 @@
     struct statvfs sfs;
 
     if (statvfs(path, &sfs)) {
-        debugs(50, 1, "" << path << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "" << path << ": " << xstrerror());
         return 1;
     }
 
@@ -624,7 +624,7 @@
     struct statfs sfs;
 
     if (statfs(path, &sfs)) {
-        debugs(50, 1, "" << path << ": " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "" << path << ": " << xstrerror());
         return 1;
     }
 
@@ -935,17 +935,17 @@
     /* this is very bogus, its specific to the any Store maintaining an
      * in-core index, not global */
     size_t buckets = (Store::Root().maxSize() + Config.memMaxSize) / Config.Store.avgObjectSize;
-    debugs(20, 1, "Swap maxSize " << (Store::Root().maxSize() >> 10) <<
+    debugs(20, DBG_IMPORTANT, "Swap maxSize " << (Store::Root().maxSize() >> 10) <<
            " + " << ( Config.memMaxSize >> 10) << " KB, estimated " << buckets << " objects");
     buckets /= Config.Store.objectsPerBucket;
-    debugs(20, 1, "Target number of buckets: " << buckets);
+    debugs(20, DBG_IMPORTANT, "Target number of buckets: " << buckets);
     /* ideally the full scan period should be configurable, for the
      * moment it remains at approximately 24 hours.  */
     store_hash_buckets = storeKeyHashBuckets(buckets);
-    debugs(20, 1, "Using " << store_hash_buckets << " Store buckets");
-    debugs(20, 1, "Max Mem  size: " << ( Config.memMaxSize >> 10) << " KB" <<
+    debugs(20, DBG_IMPORTANT, "Using " << store_hash_buckets << " Store buckets");
+    debugs(20, DBG_IMPORTANT, "Max Mem  size: " << ( Config.memMaxSize >> 10) << " KB" <<
            (Config.memShared ? " [shared]" : ""));
-    debugs(20, 1, "Max Swap size: " << (Store::Root().maxSize() >> 10) << " KB");
+    debugs(20, DBG_IMPORTANT, "Max Swap size: " << (Store::Root().maxSize() >> 10) << " KB");
 
     store_table = hash_create(storeKeyHashCmp,
                               store_hash_buckets, storeKeyHashHash);

=== modified file 'src/store_log.cc'
--- src/store_log.cc	2012-07-18 15:47:58 +0000
+++ src/store_log.cc	2012-08-02 21:10:18 +0000
@@ -71,7 +71,7 @@
     ++storeLogTagsCounts[tag];
     if (mem != NULL) {
         if (mem->log_url == NULL) {
-            debugs(20, 1, "storeLog: NULL log_url for " << mem->url);
+            debugs(20, DBG_IMPORTANT, "storeLog: NULL log_url for " << mem->url);
             mem->dump();
             mem->log_url = xstrdup(mem->url);
         }
@@ -150,7 +150,7 @@
     storeLogRegisterWithCacheManager();
 
     if (Config.Log.store == NULL || strcmp(Config.Log.store, "none") == 0) {
-        debugs(20, 1, "Store logging disabled");
+        debugs(20, DBG_IMPORTANT, "Store logging disabled");
         return;
     }
 

=== modified file 'src/store_rebuild.cc'
--- src/store_rebuild.cc	2012-07-23 07:02:06 +0000
+++ src/store_rebuild.cc	2012-08-02 21:10:18 +0000
@@ -103,13 +103,13 @@
 
         if ((++validated & 0x3FFFF) == 0)
             /* TODO format the int with with a stream operator */
-            debugs(20, 1, "  " << validated << " Entries Validated so far.");
+            debugs(20, DBG_IMPORTANT, "  " << validated << " Entries Validated so far.");
     }
 
     if (currentSearch->isDone()) {
-        debugs(20, 1, "  Completed Validation Procedure");
-        debugs(20, 1, "  Validated " << validated << " Entries");
-        debugs(20, 1, "  store_swap_size = " << Store::Root().currentSize() / 1024.0 << " KB");
+        debugs(20, DBG_IMPORTANT, "  Completed Validation Procedure");
+        debugs(20, DBG_IMPORTANT, "  Validated " << validated << " Entries");
+        debugs(20, DBG_IMPORTANT, "  store_swap_size = " << Store::Root().currentSize() / 1024.0 << " KB");
         --StoreController::store_dirs_rebuilding;
         assert(0 == StoreController::store_dirs_rebuilding);
 
@@ -155,18 +155,18 @@
 
     dt = tvSubDsec(rebuild_start, current_time);
 
-    debugs(20, 1, "Finished rebuilding storage from disk.");
-    debugs(20, 1, "  " << std::setw(7) << counts.scancount  << " Entries scanned");
-    debugs(20, 1, "  " << std::setw(7) << counts.invalid  << " Invalid entries.");
-    debugs(20, 1, "  " << std::setw(7) << counts.badflags  << " With invalid flags.");
-    debugs(20, 1, "  " << std::setw(7) << counts.objcount  << " Objects loaded.");
-    debugs(20, 1, "  " << std::setw(7) << counts.expcount  << " Objects expired.");
-    debugs(20, 1, "  " << std::setw(7) << counts.cancelcount  << " Objects cancelled.");
-    debugs(20, 1, "  " << std::setw(7) << counts.dupcount  << " Duplicate URLs purged.");
-    debugs(20, 1, "  " << std::setw(7) << counts.clashcount  << " Swapfile clashes avoided.");
-    debugs(20, 1, "  Took "<< std::setw(3)<< std::setprecision(2) << dt << " seconds ("<< std::setw(6) <<
+    debugs(20, DBG_IMPORTANT, "Finished rebuilding storage from disk.");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.scancount  << " Entries scanned");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.invalid  << " Invalid entries.");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.badflags  << " With invalid flags.");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.objcount  << " Objects loaded.");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.expcount  << " Objects expired.");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.cancelcount  << " Objects cancelled.");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.dupcount  << " Duplicate URLs purged.");
+    debugs(20, DBG_IMPORTANT, "  " << std::setw(7) << counts.clashcount  << " Swapfile clashes avoided.");
+    debugs(20, DBG_IMPORTANT, "  Took "<< std::setw(3)<< std::setprecision(2) << dt << " seconds ("<< std::setw(6) <<
            ((double) counts.objcount / (dt > 0.0 ? dt : 1.0)) << " objects/sec).");
-    debugs(20, 1, "Beginning Validation Procedure");
+    debugs(20, DBG_IMPORTANT, "Beginning Validation Procedure");
 
     eventAdd("storeCleanup", storeCleanup, NULL, 0.0, 1);
 
@@ -232,7 +232,7 @@
         d += (double) RebuildProgress[sd_index].total;
     }
 
-    debugs(20, 1, "Store rebuilding is "<< std::setw(4)<< std::setprecision(2) << 100.0 * n / d << "% complete");
+    debugs(20, DBG_IMPORTANT, "Store rebuilding is "<< std::setw(4)<< std::setprecision(2) << 100.0 * n / d << "% complete");
     last_report = squid_curtime;
 }
 

=== modified file 'src/store_swapin.cc'
--- src/store_swapin.cc	2012-01-20 18:55:04 +0000
+++ src/store_swapin.cc	2012-08-02 21:10:18 +0000
@@ -59,12 +59,12 @@
            e->swap_filen << " " <<  e->getMD5Text());
 
     if (e->swap_status != SWAPOUT_WRITING && e->swap_status != SWAPOUT_DONE) {
-        debugs(20, 1, "storeSwapInStart: bad swap_status (" << swapStatusStr[e->swap_status] << ")");
+        debugs(20, DBG_IMPORTANT, "storeSwapInStart: bad swap_status (" << swapStatusStr[e->swap_status] << ")");
         return;
     }
 
     if (e->swap_filen < 0) {
-        debugs(20, 1, "storeSwapInStart: swap_filen < 0");
+        debugs(20, DBG_IMPORTANT, "storeSwapInStart: swap_filen < 0");
         return;
     }
 

=== modified file 'src/store_swapout.cc'
--- src/store_swapout.cc	2012-07-13 14:33:19 +0000
+++ src/store_swapout.cc	2012-08-02 21:18:43 +0000
@@ -220,7 +220,7 @@
 #if SIZEOF_OFF_T <= 4
 
     if (mem_obj->endOffset() > 0x7FFF0000) {
-        debugs(20, 0, "WARNING: preventing off_t overflow for " << url());
+        debugs(20, DBG_CRITICAL, "WARNING: preventing off_t overflow for " << url());
         abort();
         return;
     }

=== modified file 'src/tests/testCoss.cc'
--- src/tests/testCoss.cc	2012-01-20 18:55:04 +0000
+++ src/tests/testCoss.cc	2012-07-31 21:45:27 +0000
@@ -4,7 +4,6 @@
 #include "Store.h"
 #include "SwapDir.h"
 #include "DiskIO/DiskIOModule.h"
-#include "fs/ufs/ufscommon.h"
 #include "fs/coss/CossSwapDir.h"
 #include "Mem.h"
 #include "MemObject.h"

=== modified file 'src/tests/testDiskIO.cc'
--- src/tests/testDiskIO.cc	2012-01-20 18:55:04 +0000
+++ src/tests/testDiskIO.cc	2012-07-31 21:45:27 +0000
@@ -5,7 +5,6 @@
 #include "Store.h"
 #include "SwapDir.h"
 #include "DiskIO/DiskIOModule.h"
-#include "fs/ufs/ufscommon.h"
 #if 0 // AYJ: COSS in Squid-3 is disabled.
 #include "fs/coss/CossSwapDir.h"
 #endif

=== modified file 'src/tests/testNull.cc'
--- src/tests/testNull.cc	2012-01-20 18:55:04 +0000
+++ src/tests/testNull.cc	2012-07-31 21:45:27 +0000
@@ -4,7 +4,6 @@
 #include "Store.h"
 #include "SwapDir.h"
 #include "DiskIO/DiskIOModule.h"
-#include "fs/ufs/ufscommon.h"
 #include "fs/null/store_null.h"
 #include "Mem.h"
 #include "MemObject.h"

=== modified file 'src/tests/testUfs.cc'
--- src/tests/testUfs.cc	2012-01-20 18:55:04 +0000
+++ src/tests/testUfs.cc	2012-08-04 12:11:57 +0000
@@ -1,15 +1,15 @@
 #define SQUID_UNIT_TEST 1
 #include "squid.h"
-#include "testUfs.h"
-#include "Store.h"
-#include "SwapDir.h"
 #include "DiskIO/DiskIOModule.h"
-#include "fs/ufs/ufscommon.h"
+#include "HttpHeader.h"
+#include "HttpReply.h"
 #include "Mem.h"
 #include "MemObject.h"
-#include "HttpHeader.h"
-#include "HttpReply.h"
 #include "testStoreSupport.h"
+#include "testUfs.h"
+#include "Store.h"
+#include "SwapDir.h"
+#include "fs/ufs/UFSSwapDir.h"
 
 #if HAVE_STDEXCEPT
 #include <stdexcept>
@@ -98,7 +98,6 @@
     commonInit();
     mem_policy = createRemovalPolicy(Config.replPolicy);
 
-
     char *path=xstrdup(TESTDIR);
 
     char *config_line=xstrdup("foo 100 1 1");

=== modified file 'src/tools.cc'
--- src/tools.cc	2012-07-18 15:47:58 +0000
+++ src/tools.cc	2012-08-02 21:18:43 +0000
@@ -428,7 +428,7 @@
 
 #if !HAVE_SIGACTION
     if (signal(sig, sigusr2_handle) == SIG_ERR)	/* reinstall */
-        debugs(50, 0, "signal: sig=" << sig << " func=sigusr2_handle: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "signal: sig=" << sig << " func=sigusr2_handle: " << xstrerror());
 
 #endif
 }
@@ -698,7 +698,7 @@
 #endif
 
         if (setgid(Config2.effectiveGroupID) < 0)
-            debugs(50, 0, "ALERT: setgid: " << xstrerror());
+            debugs(50, DBG_CRITICAL, "ALERT: setgid: " << xstrerror());
 
     }
 
@@ -714,10 +714,10 @@
     if (!Config.effectiveGroup) {
 
         if (setgid(Config2.effectiveGroupID) < 0)
-            debugs(50, 0, "ALERT: setgid: " << xstrerror());
+            debugs(50, DBG_CRITICAL, "ALERT: setgid: " << xstrerror());
 
         if (initgroups(Config.effectiveUser, Config2.effectiveGroupID) < 0) {
-            debugs(50, 0, "ALERT: initgroups: unable to set groups for User " <<
+            debugs(50, DBG_CRITICAL, "ALERT: initgroups: unable to set groups for User " <<
                    Config.effectiveUser << " and Group " <<
                    (unsigned) Config2.effectiveGroupID << "");
         }
@@ -726,17 +726,17 @@
 #if HAVE_SETRESUID
 
     if (setresuid(Config2.effectiveUserID, Config2.effectiveUserID, 0) < 0)
-        debugs(50, 0, "ALERT: setresuid: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "ALERT: setresuid: " << xstrerror());
 
 #elif HAVE_SETEUID
 
     if (seteuid(Config2.effectiveUserID) < 0)
-        debugs(50, 0, "ALERT: seteuid: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "ALERT: seteuid: " << xstrerror());
 
 #else
 
     if (setuid(Config2.effectiveUserID) < 0)
-        debugs(50, 0, "ALERT: setuid: " << xstrerror());
+        debugs(50, DBG_CRITICAL, "ALERT: setuid: " << xstrerror());
 
 #endif
 
@@ -785,7 +785,7 @@
     setuid(0);
 
     if (setuid(uid) < 0)
-        debugs(50, 1, "no_suid: setuid: " << xstrerror());
+        debugs(50, DBG_IMPORTANT, "no_suid: setuid: " << xstrerror());
 
     restoreCapabilities(0);
 
@@ -911,7 +911,7 @@
     leave_suid();
 
     if (fd < 0) {
-        debugs(50, 0, "" << f << ": " << xstrerror());
+        debugs(50, DBG_CRITICAL, "" << f << ": " << xstrerror());
         debug_trap("Could not write pid file");
         return;
     }
@@ -1177,7 +1177,7 @@
     fp = fopen(Config.etcHostsPath, "r");
 
     if (fp == NULL) {
-        debugs(1, 1, "parseEtcHosts: " << Config.etcHostsPath << ": " << xstrerror());
+        debugs(1, DBG_IMPORTANT, "parseEtcHosts: " << Config.etcHostsPath << ": " << xstrerror());
         return;
     }
 

=== modified file 'src/unlinkd.cc'
--- src/unlinkd.cc	2012-07-20 15:31:04 +0000
+++ src/unlinkd.cc	2012-08-02 21:10:18 +0000
@@ -124,11 +124,11 @@
     bytes_written = write(unlinkd_wfd, buf, l);
 
     if (bytes_written < 0) {
-        debugs(2, 1, "unlinkdUnlink: write FD " << unlinkd_wfd << " failed: " << xstrerror());
+        debugs(2, DBG_IMPORTANT, "unlinkdUnlink: write FD " << unlinkd_wfd << " failed: " << xstrerror());
         safeunlink(path, 0);
         return;
     } else if (bytes_written != l) {
-        debugs(2, 1, "unlinkdUnlink: FD " << unlinkd_wfd << " only wrote " << bytes_written << " of " << l << " bytes");
+        debugs(2, DBG_IMPORTANT, "unlinkdUnlink: FD " << unlinkd_wfd << " only wrote " << bytes_written << " of " << l << " bytes");
         safeunlink(path, 0);
         return;
     }
@@ -149,7 +149,7 @@
 {
 
     if (unlinkd_wfd > -1) {
-        debugs(2, 1, "Closing unlinkd pipe on FD " << unlinkd_wfd);
+        debugs(2, DBG_IMPORTANT, "Closing unlinkd pipe on FD " << unlinkd_wfd);
         shutdown(unlinkd_wfd, SD_BOTH);
         comm_close(unlinkd_wfd);
 
@@ -164,7 +164,7 @@
     if (hIpc) {
         if (WaitForSingleObject(hIpc, 5000) != WAIT_OBJECT_0) {
             getCurrentTime();
-            debugs(2, 1, "unlinkdClose: WARNING: (unlinkd," << pid << "d) didn't exit in 5 seconds");
+            debugs(2, DBG_IMPORTANT, "unlinkdClose: WARNING: (unlinkd," << pid << "d) didn't exit in 5 seconds");
         }
 
         CloseHandle(hIpc);
@@ -176,7 +176,7 @@
     if (unlinkd_wfd < 0)
         return;
 
-    debugs(2, 1, "Closing unlinkd pipe on FD " << unlinkd_wfd);
+    debugs(2, DBG_IMPORTANT, "Closing unlinkd pipe on FD " << unlinkd_wfd);
 
     file_close(unlinkd_wfd);
 
@@ -259,7 +259,7 @@
     if (FD_PIPE == fd_table[unlinkd_wfd].type)
         commUnsetNonBlocking(unlinkd_wfd);
 
-    debugs(2, 1, "Unlinkd pipe opened on FD " << unlinkd_wfd);
+    debugs(2, DBG_IMPORTANT, "Unlinkd pipe opened on FD " << unlinkd_wfd);
 
 #if _SQUID_MSWIN_
 

=== modified file 'src/url.cc'
--- src/url.cc	2012-07-23 07:02:06 +0000
+++ src/url.cc	2012-08-02 21:18:43 +0000
@@ -232,7 +232,7 @@
     if ((l = strlen(url)) + Config.appendDomainLen > (MAX_URL - 1)) {
         /* terminate so it doesn't overflow other buffers */
         *(url + (MAX_URL >> 1)) = '\0';
-        debugs(23, 1, "urlParse: URL too large (" << l << " bytes)");
+        debugs(23, DBG_IMPORTANT, "urlParse: URL too large (" << l << " bytes)");
         return NULL;
     }
     if (method == METHOD_CONNECT) {
@@ -382,7 +382,7 @@
     debugs(23, 3, "urlParse: Split URL '" << url << "' into proto='" << proto << "', host='" << host << "', port='" << port << "', path='" << urlpath << "'");
 
     if (Config.onoff.check_hostnames && strspn(host, Config.onoff.allow_underscore ? valid_hostname_chars_u : valid_hostname_chars) != strlen(host)) {
-        debugs(23, 1, "urlParse: Illegal character in hostname '" << host << "'");
+        debugs(23, DBG_IMPORTANT, "urlParse: Illegal character in hostname '" << host << "'");
         return NULL;
     }
 
@@ -396,7 +396,7 @@
 
     /* reject duplicate or leading dots */
     if (strstr(host, "..") || *host == '.') {
-        debugs(23, 1, "urlParse: Illegal hostname '" << host << "'");
+        debugs(23, DBG_IMPORTANT, "urlParse: Illegal hostname '" << host << "'");
         return NULL;
     }
 
@@ -409,7 +409,7 @@
     /* These ports are filtered in the default squid.conf, but
      * maybe someone wants them hardcoded... */
     if (port == 7 || port == 9 || port == 19) {
-        debugs(23, 0, "urlParse: Deny access to port " << port);
+        debugs(23, DBG_CRITICAL, "urlParse: Deny access to port " << port);
         return NULL;
     }
 #endif

=== modified file 'src/urn.cc'
--- src/urn.cc	2012-07-19 13:49:54 +0000
+++ src/urn.cc	2012-08-02 21:10:18 +0000
@@ -156,7 +156,7 @@
     if (rtt_ret)
         *rtt_ret = min_rtt;
 
-    debugs(52, 1, "urnFindMinRtt: Returning '" <<
+    debugs(52, DBG_IMPORTANT, "urnFindMinRtt: Returning '" <<
            (min_u ? min_u->url : "NONE") << "' RTT " <<
            min_rtt  );
 
@@ -360,7 +360,7 @@
     k = headersEnd(buf, urnState->reqofs);
 
     if (0 == k) {
-        debugs(52, 1, "urnHandleReply: didn't find end-of-headers for " << e->url()  );
+        debugs(52, DBG_IMPORTANT, "urnHandleReply: didn't find end-of-headers for " << e->url()  );
         urnHandleReplyError(urnState, urlres_e);
         return;
     }

=== modified file 'src/wccp.cc'
--- src/wccp.cc	2012-07-19 13:49:54 +0000
+++ src/wccp.cc	2012-08-02 21:10:18 +0000
@@ -162,7 +162,7 @@
 
     Comm::SetSelect(theWccpConnection, COMM_SELECT_READ, wccpHandleUdp, NULL, 0);
 
-    debugs(80, 1, "Accepting WCCPv1 messages on " << Config.Wccp.address << ", FD " << theWccpConnection << ".");
+    debugs(80, DBG_IMPORTANT, "Accepting WCCPv1 messages on " << Config.Wccp.address << ", FD " << theWccpConnection << ".");
 
 
     // Sadly WCCP only does IPv4
@@ -186,7 +186,7 @@
 wccpConnectionClose(void)
 {
     if (theWccpConnection > -1) {
-        debugs(80, 1, "FD " << theWccpConnection << " Closing WCCPv1 socket");
+        debugs(80, DBG_IMPORTANT, "FD " << theWccpConnection << " Closing WCCPv1 socket");
         comm_close(theWccpConnection);
         theWccpConnection = -1;
     }
@@ -237,7 +237,7 @@
         return;
 
     if (ntohl(wccp_i_see_you.number) > WCCP_ACTIVE_CACHES) {
-        debugs(80, 1, "Ignoring WCCP_I_SEE_YOU from " <<
+        debugs(80, DBG_IMPORTANT, "Ignoring WCCP_I_SEE_YOU from " <<
                from << " with number of caches set to " <<
                (int) ntohl(wccp_i_see_you.number));
 

=== modified file 'src/wccp2.cc'
--- src/wccp2.cc	2012-07-23 07:02:06 +0000
+++ src/wccp2.cc	2012-08-02 21:18:43 +0000
@@ -642,7 +642,7 @@
     /* Make sure the security type matches what we expect */
 
     if (ntohl(ws->security_option) != srv->wccp2_security_type) {
-        debugs(80, 1, "wccp2_check_security: received packet has the wrong security option");
+        debugs(80, DBG_IMPORTANT, "wccp2_check_security: received packet has the wrong security option");
         return 0;
     }
 
@@ -651,7 +651,7 @@
     }
 
     if (srv->wccp2_security_type != WCCP2_MD5_SECURITY) {
-        debugs(80, 1, "wccp2_check_security: invalid security option");
+        debugs(80, DBG_IMPORTANT, "wccp2_check_security: invalid security option");
         return 0;
     }
 
@@ -1015,8 +1015,8 @@
 #endif
     Comm::SetSelect(theWccp2Connection, COMM_SELECT_READ, wccp2HandleUdp, NULL, 0);
 
-    debugs(80, 1, "Accepting WCCPv2 messages on port " << WCCP_PORT << ", FD " << theWccp2Connection << ".");
-    debugs(80, 1, "Initialising all WCCPv2 lists");
+    debugs(80, DBG_IMPORTANT, "Accepting WCCPv2 messages on port " << WCCP_PORT << ", FD " << theWccp2Connection << ".");
+    debugs(80, DBG_IMPORTANT, "Initialising all WCCPv2 lists");
 
     /* Initialise all routers on all services */
     memset(&null, 0, sizeof(null));
@@ -1079,7 +1079,7 @@
     }
 
     if (theWccp2Connection > -1) {
-        debugs(80, 1, "FD " << theWccp2Connection << " Closing WCCPv2 socket");
+        debugs(80, DBG_IMPORTANT, "FD " << theWccp2Connection << " Closing WCCPv2 socket");
         comm_close(theWccp2Connection);
         theWccp2Connection = -1;
     }
@@ -1204,7 +1204,7 @@
     offset = 0;
 
     if (data_length > len) {
-        debugs(80, 1, "ERROR: Malformed WCCPv2 packet claiming it's bigger than received data");
+        debugs(80, DBG_IMPORTANT, "ERROR: Malformed WCCPv2 packet claiming it's bigger than received data");
         return;
     }
 
@@ -1220,7 +1220,7 @@
         case WCCP2_SECURITY_INFO:
 
             if (security_info != NULL) {
-                debugs(80, 1, "Duplicate security definition");
+                debugs(80, DBG_IMPORTANT, "Duplicate security definition");
                 return;
             }
 
@@ -1230,7 +1230,7 @@
         case WCCP2_SERVICE_INFO:
 
             if (service_info != NULL) {
-                debugs(80, 1, "Duplicate service_info definition");
+                debugs(80, DBG_IMPORTANT, "Duplicate service_info definition");
                 return;
             }
 
@@ -1240,7 +1240,7 @@
         case WCCP2_ROUTER_ID_INFO:
 
             if (router_identity_info != NULL) {
-                debugs(80, 1, "Duplicate router_identity_info definition");
+                debugs(80, DBG_IMPORTANT, "Duplicate router_identity_info definition");
                 return;
             }
 
@@ -1250,7 +1250,7 @@
         case WCCP2_RTR_VIEW_INFO:
 
             if (router_view_header != NULL) {
-                debugs(80, 1, "Duplicate router_view definition");
+                debugs(80, DBG_IMPORTANT, "Duplicate router_view definition");
                 return;
             }
 
@@ -1260,7 +1260,7 @@
         case WCCP2_CAPABILITY_INFO:
 
             if (router_capability_header != NULL) {
-                debugs(80, 1, "Duplicate router_capability definition");
+                debugs(80, DBG_IMPORTANT, "Duplicate router_capability definition");
                 return;
             }
 
@@ -1274,20 +1274,20 @@
             break;
 
         default:
-            debugs(80, 1, "Unknown record type in WCCPv2 Packet (" << ntohs(header->type) << ").");
+            debugs(80, DBG_IMPORTANT, "Unknown record type in WCCPv2 Packet (" << ntohs(header->type) << ").");
         }
 
         offset += sizeof(struct wccp2_item_header_t);
         offset += ntohs(header->length);
 
         if (offset > data_length) {
-            debugs(80, 1, "Error: WCCPv2 packet tried to tell us there is data beyond the end of the packet");
+            debugs(80, DBG_IMPORTANT, "Error: WCCPv2 packet tried to tell us there is data beyond the end of the packet");
             return;
         }
     }
 
     if ((security_info == NULL) || (service_info == NULL) || (router_identity_info == NULL) || (router_view_header == NULL)) {
-        debugs(80, 1, "Incomplete WCCPv2 Packet");
+        debugs(80, DBG_IMPORTANT, "Incomplete WCCPv2 Packet");
         return;
     }
 
@@ -1305,17 +1305,17 @@
     }
 
     if (service_list_ptr == NULL) {
-        debugs(80, 1, "WCCPv2 Unknown service received from router (" << service_info->service_id << ")");
+        debugs(80, DBG_IMPORTANT, "WCCPv2 Unknown service received from router (" << service_info->service_id << ")");
         return;
     }
 
     if (ntohl(security_info->security_option) != ntohl(service_list_ptr->security_info->security_option)) {
-        debugs(80, 1, "Invalid security option in WCCPv2 Packet (" << ntohl(security_info->security_option) << " vs " << ntohl(service_list_ptr->security_info->security_option) << ").");
+        debugs(80, DBG_IMPORTANT, "Invalid security option in WCCPv2 Packet (" << ntohl(security_info->security_option) << " vs " << ntohl(service_list_ptr->security_info->security_option) << ").");
         return;
     }
 
     if (!wccp2_check_security(service_list_ptr, (char *) security_info, (char *) &wccp2_i_see_you, len)) {
-        debugs(80, 1, "Received WCCPv2 Packet failed authentication");
+        debugs(80, DBG_IMPORTANT, "Received WCCPv2 Packet failed authentication");
         return;
     }
 
@@ -1326,7 +1326,7 @@
     }
 
     if (router_list_ptr->next == NULL) {
-        debugs(80, 1, "WCCPv2 Packet received from unknown router");
+        debugs(80, DBG_IMPORTANT, "WCCPv2 Packet received from unknown router");
         return;
     }
 
@@ -1342,7 +1342,7 @@
     /* TODO: check return/forwarding methods */
     if (router_capability_header == NULL) {
         if ((Config.Wccp2.return_method != WCCP2_PACKET_RETURN_METHOD_GRE) || (Config.Wccp2.forwarding_method != WCCP2_FORWARDING_METHOD_GRE)) {
-            debugs(80, 1, "wccp2HandleUdp: fatal error - A WCCP router does not support the forwarding method specified, only GRE supported");
+            debugs(80, DBG_IMPORTANT, "wccp2HandleUdp: fatal error - A WCCP router does not support the forwarding method specified, only GRE supported");
             wccp2ConnectionClose();
             return;
         }
@@ -1359,7 +1359,7 @@
             case WCCP2_CAPABILITY_FORWARDING_METHOD:
 
                 if (!(ntohl(router_capability_element->capability_value) & Config.Wccp2.forwarding_method)) {
-                    debugs(80, 1, "wccp2HandleUdp: fatal error - A WCCP router has specified a different forwarding method " << ntohl(router_capability_element->capability_value) << ", expected " << Config.Wccp2.forwarding_method);
+                    debugs(80, DBG_IMPORTANT, "wccp2HandleUdp: fatal error - A WCCP router has specified a different forwarding method " << ntohl(router_capability_element->capability_value) << ", expected " << Config.Wccp2.forwarding_method);
                     wccp2ConnectionClose();
                     return;
                 }
@@ -1369,7 +1369,7 @@
             case WCCP2_CAPABILITY_ASSIGNMENT_METHOD:
 
                 if (!(ntohl(router_capability_element->capability_value) & Config.Wccp2.assignment_method)) {
-                    debugs(80, 1, "wccp2HandleUdp: fatal error - A WCCP router has specified a different assignment method " << ntohl(router_capability_element->capability_value) << ", expected "<< Config.Wccp2.assignment_method);
+                    debugs(80, DBG_IMPORTANT, "wccp2HandleUdp: fatal error - A WCCP router has specified a different assignment method " << ntohl(router_capability_element->capability_value) << ", expected "<< Config.Wccp2.assignment_method);
                     wccp2ConnectionClose();
                     return;
                 }
@@ -1379,7 +1379,7 @@
             case WCCP2_CAPABILITY_RETURN_METHOD:
 
                 if (!(ntohl(router_capability_element->capability_value) & Config.Wccp2.return_method)) {
-                    debugs(80, 1, "wccp2HandleUdp: fatal error - A WCCP router has specified a different return method " << ntohl(router_capability_element->capability_value) << ", expected " << Config.Wccp2.return_method);
+                    debugs(80, DBG_IMPORTANT, "wccp2HandleUdp: fatal error - A WCCP router has specified a different return method " << ntohl(router_capability_element->capability_value) << ", expected " << Config.Wccp2.return_method);
                     wccp2ConnectionClose();
                     return;
                 }
@@ -1391,7 +1391,7 @@
                 break; // ignore silently for now
 
             default:
-                debugs(80, 1, "Unknown capability type in WCCPv2 Packet (" << ntohs(router_capability_element->capability_type) << ").");
+                debugs(80, DBG_IMPORTANT, "Unknown capability type in WCCPv2 Packet (" << ntohs(router_capability_element->capability_type) << ").");
             }
 
             router_capability_element = (struct wccp2_capability_element_t *) (((char *) router_capability_element) + sizeof(struct wccp2_item_header_t) + ntohs(router_capability_element->capability_length));
@@ -1551,7 +1551,7 @@
     debugs(80, 6, "wccp2HereIam: Called");
 
     if (wccp2_connected == 0) {
-        debugs(80, 1, "wccp2HereIam: wccp2 socket closed.  Shutting down WCCP2");
+        debugs(80, DBG_IMPORTANT, "wccp2HereIam: wccp2 socket closed.  Shutting down WCCP2");
         return;
     }
 
@@ -2118,13 +2118,13 @@
     char wccp_password[WCCP2_PASSWORD_LEN + 1];
 
     if (wccp2_connected == 1) {
-        debugs(80, 1, "WCCPv2: Somehow reparsing the configuration without having shut down WCCP! Try reloading squid again.");
+        debugs(80, DBG_IMPORTANT, "WCCPv2: Somehow reparsing the configuration without having shut down WCCP! Try reloading squid again.");
         return;
     }
 
     /* Snarf the type */
     if ((t = strtok(NULL, w_space)) == NULL) {
-        debugs(80, 0, "wccp2ParseServiceInfo: missing service info type (standard|dynamic)");
+        debugs(80, DBG_CRITICAL, "wccp2ParseServiceInfo: missing service info type (standard|dynamic)");
         self_destruct();
     }
 
@@ -2133,7 +2133,7 @@
     } else if (strcmp(t, "dynamic") == 0) {
         service = WCCP2_SERVICE_DYNAMIC;
     } else {
-        debugs(80, 0, "wccp2ParseServiceInfo: bad service info type (expected standard|dynamic, got " << t << ")");
+        debugs(80, DBG_CRITICAL, "wccp2ParseServiceInfo: bad service info type (expected standard|dynamic, got " << t << ")");
         self_destruct();
     }
 
@@ -2302,7 +2302,7 @@
     int priority = -1;
 
     if (wccp2_connected == 1) {
-        debugs(80, 1, "WCCPv2: Somehow reparsing the configuration without having shut down WCCP! Try reloading squid again.");
+        debugs(80, DBG_IMPORTANT, "WCCPv2: Somehow reparsing the configuration without having shut down WCCP! Try reloading squid again.");
         return;
     }
 

=== modified file 'test-suite/debug.cc'
--- test-suite/debug.cc	2012-01-20 18:55:04 +0000
+++ test-suite/debug.cc	2012-08-02 21:10:18 +0000
@@ -81,10 +81,10 @@
     if (true)
         debugs(1,9,"this won't compile if the macro is broken.");
     else
-        debugs(1,1,"bar");
+        debugs(1, DBG_IMPORTANT,"bar");
     StreamTest aStreamObject;
     StreamTest *streamPointer (&aStreamObject);
-    debugs(1,1,aStreamObject);
-    debugs(1,1,streamPointer->getAnInt() << " " << aStreamObject.getACString());
+    debugs(1, DBG_IMPORTANT,aStreamObject);
+    debugs(1, DBG_IMPORTANT,streamPointer->getAnInt() << " " << aStreamObject.getACString());
     return 0;
 }

# Begin bundle
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
