Index: trunk/coverager.c
===================================================================
--- trunk/coverager.c	(revision 208)
+++ trunk/coverager.c	(revision 212)
@@ -147,9 +147,11 @@
 			for (; len >= sizeof(long) * 2; len -= sizeof(long) * 2, p += 2) {
 				if (zend_hash_index_find(cov, p[0], (void**)&phits) == SUCCESS) {
-					if (p[1] == 0) {
+					if (p[1] == -1) {
 						/* OPTIMIZE: already marked */
 						continue;
 					}
-					p[1] += *phits;
+					if (*phits != -1) {
+						p[1] += *phits;
+					}
 				}
 				zend_hash_index_update(cov, p[0], &p[1], sizeof(p[1]), NULL);
@@ -219,6 +221,6 @@
 				long hits = *phits;
 
-				if (hits != 0) {
-					hits = 0;
+				if (hits != -1) {
+					hits = -1;
 					zend_hash_index_update(cov, pos2->h, &hits, sizeof(hits), NULL);
 				}
@@ -377,9 +379,11 @@
 	}
 	if (zend_hash_index_find(cov, line, (void**)&poldhits) == SUCCESS) {
-		if (hits == 0) {
-			/* OPTIMIZE: already marked */
+		if (hits == -1) {
+			/* OPTIMIZE: -1 == init-ing, but it's already initized */
 			return;
 		}
-		hits += *poldhits;
+		if (*poldhits != -1) {
+			hits += *poldhits;
+		}
 	}
 	zend_hash_index_update(cov, line, &hits, sizeof(hits), NULL);
@@ -430,5 +434,5 @@
 			case ZEND_EXT_FCALL_END:
 #endif
-				xc_coverager_add_hits(cov, op_array->opcodes[i].lineno, 0 TSRMLS_CC);
+				xc_coverager_add_hits(cov, op_array->opcodes[i].lineno, -1 TSRMLS_CC);
 				break;
 		}
