diff --git a/storage/innobase/sync/sync0sync.cc b/storage/innobase/sync/sync0sync.cc
index 4176fc8..42e429a 100644
--- a/storage/innobase/sync/sync0sync.cc
+++ b/storage/innobase/sync/sync0sync.cc
@@ -247,11 +247,7 @@ value returned from the earlier call of os_event_reset(), it will
 static const ulint SYNC_THREAD_N_LEVELS = 10000;
 
 /** Array for tracking sync levels per thread. */
-struct sync_arr_t {
-	ulint		n_elems;	/*!< Number of elements in the array */
-
-	std::vector<sync_level_t>	elems;		/*!< Vector of elements */
-};
+typedef std::vector<sync_level_t> sync_arr_t;		/*!< Vector of elements */
 
 /** Mutexes or rw-locks held by a thread */
 struct sync_thread_t{
@@ -879,10 +875,10 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 {
 	ulint		i;
 
-	for (i = 0; i < arr->n_elems; i++) {
+	for (i = 0; i < arr->size(); i++) {
 		const sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL && slot->level <= limit) {
 			if (warn) {
@@ -914,10 +910,10 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 {
 	ulint		i;
 
-	for (i = 0; i < arr->n_elems; i++) {
+	for (i = 0; i < arr->size(); i++) {
 		const sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL && slot->level == level) {
 
@@ -961,10 +957,10 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 
 	arr = thread_slot->levels;
 
-	for (i = 0; i < arr->n_elems; i++) {
+	for (i = 0; i < arr->size(); i++) {
 		sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL && slot->level == level) {
 
@@ -1010,10 +1006,10 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 
 	arr = thread_slot->levels;
 
-	for (i = 0; i < arr->n_elems; ++i) {
+	for (i = 0; i < arr->size(); ++i) {
 		const sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL
 		    && (!dict_mutex_allowed
@@ -1070,10 +1066,10 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 
 	arr = thread_slot->levels;
 
-	for (i = 0; i < arr->n_elems; ++i) {
+	for (i = 0; i < arr->size(); ++i) {
 		const sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL
 		    && (!has_search_latch
@@ -1133,7 +1129,7 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 	if (thread_slot == NULL) {
 
 		/* We have to allocate the level array for a new thread */
-		array = static_cast<sync_arr_t*>(calloc(1, sizeof(sync_arr_t)));
+		array = new sync_arr_t();
 		ut_a(array != NULL);
 		thread_slot = sync_thread_level_arrays_find_free();
 		thread_slot->levels = array;
@@ -1347,10 +1343,9 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 
 levels_ok:
 
-	array->n_elems++;
 	sync_level.latch = latch;
 	sync_level.level = level;
-	array->elems.push_back(sync_level);
+	array->push_back(sync_level);
 
 	mutex_exit(&sync_thread_mutex);
 }
@@ -1396,15 +1391,14 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 
 	array = thread_slot->levels;
 
-	for (std::vector<sync_level_t>::iterator it = array->elems.begin(); it != array->elems.end(); ++it) {
+	for (std::vector<sync_level_t>::iterator it = array->begin(); it != array->end(); ++it) {
 		sync_level_t level = *it;
 
 		if (level.latch != latch) {
 			continue;
 		}
 
-		array->elems.erase(it);
-		array->n_elems--;
+		array->erase(it);
 		mutex_exit(&sync_thread_mutex);
 		return(TRUE);
 	}
@@ -1491,8 +1485,7 @@ function spins a preset time (controlled by SYNC_SPIN_ROUNDS), waiting
 
 		/* If this slot was allocated then free the slot memory too. */
 		if (slot->levels != NULL) {
-			slot->levels->elems.erase(slot->levels->elems.begin(),slot->levels->elems.end());
-			free(slot->levels);
+			delete slot->levels;
 			slot->levels = NULL;
 		}
 	}
diff --git a/storage/xtradb/sync/sync0sync.cc b/storage/xtradb/sync/sync0sync.cc
index 60b836f..a2ee55a 100644
--- a/storage/xtradb/sync/sync0sync.cc
+++ b/storage/xtradb/sync/sync0sync.cc
@@ -59,15 +59,16 @@
 it != array->elems.end() that is correct and standard way to do end
 of range comparison.
 Disable this "Checked Iterators" for Windows and Debug if defined.
-*/
+
 #ifdef UNIV_DEBUG
 #ifdef __WIN__
 #ifdef _ITERATOR_DEBUG_LEVEL
 #undef  _ITERATOR_DEBUG_LEVEL
 #define _ITERATOR_DEBUG_LEVEL 0
-#endif /* _ITERATOR_DEBUG_LEVEL */
-#endif /* __WIN__*/
-#endif /* UNIV_DEBUG */
+#endif
+#endif
+#endif
+*/
 
 #include <vector>
 
@@ -251,11 +252,7 @@ value returned from the earlier call of os_event_reset(), it will
 static const ulint SYNC_THREAD_N_LEVELS = 10000;
 
 /** Array for tracking sync levels per thread. */
-struct sync_arr_t {
-	ulint		n_elems;	/*!< Number of elements in the array */
-
-	std::vector<sync_level_t>	elems;		/*!< Vector of elements */
-};
+typedef std::vector<sync_level_t> sync_arr_t;
 
 /** Mutexes or rw-locks held by a thread */
 struct sync_thread_t{
@@ -982,10 +979,8 @@ struct sync_level_t{
 {
 	ulint		i;
 
-	for (i = 0; i < arr->n_elems; i++) {
-		const sync_level_t*	slot;
-
-		slot = &arr->elems[i];
+	for (i = 0; i < arr->size(); i++) {
+		const sync_level_t*	slot = &arr->at(i);
 
 		if (slot->latch != NULL && slot->level <= limit) {
 			if (warn) {
@@ -1017,10 +1012,10 @@ struct sync_level_t{
 {
 	ulint		i;
 
-	for (i = 0; i < arr->n_elems; i++) {
+	for (i = 0; i < arr->size(); i++) {
 		const sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL && slot->level == level) {
 
@@ -1064,10 +1059,10 @@ struct sync_level_t{
 
 	arr = thread_slot->levels;
 
-	for (i = 0; i < arr->n_elems; i++) {
+	for (i = 0; i < arr->size(); i++) {
 		sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL && slot->level == level) {
 
@@ -1113,10 +1108,10 @@ struct sync_level_t{
 
 	arr = thread_slot->levels;
 
-	for (i = 0; i < arr->n_elems; ++i) {
+	for (i = 0; i < arr->size(); ++i) {
 		const sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL
 		    && (!dict_mutex_allowed
@@ -1173,10 +1168,10 @@ struct sync_level_t{
 
 	arr = thread_slot->levels;
 
-	for (i = 0; i < arr->n_elems; ++i) {
+	for (i = 0; i < arr->size(); ++i) {
 		const sync_level_t*	slot;
 
-		slot = &arr->elems[i];
+		slot = &arr->at(i);
 
 		if (slot->latch != NULL
 		    && (!has_search_latch
@@ -1236,7 +1231,7 @@ struct sync_level_t{
 	if (thread_slot == NULL) {
 
 		/* We have to allocate the level array for a new thread */
-		array = static_cast<sync_arr_t*>(calloc(1, sizeof(sync_arr_t)));
+		array = new sync_arr_t();
 		ut_a(array != NULL);
 		thread_slot = sync_thread_level_arrays_find_free();
 		thread_slot->levels = array;
@@ -1467,10 +1462,9 @@ struct sync_level_t{
 
 levels_ok:
 
-	array->n_elems++;
 	sync_level.latch = latch;
 	sync_level.level = level;
-	array->elems.push_back(sync_level);
+	array->push_back(sync_level);
 
 	mutex_exit(&sync_thread_mutex);
 }
@@ -1516,15 +1510,14 @@ struct sync_level_t{
 
 	array = thread_slot->levels;
 
-	for (std::vector<sync_level_t>::iterator it = array->elems.begin(); it != array->elems.end(); ++it) {
+	for (std::vector<sync_level_t>::iterator it = array->begin(); it != array->end(); ++it) {
 		sync_level_t level = *it;
 
 		if (level.latch != latch) {
 			continue;
 		}
 
-		array->elems.erase(it);
-		array->n_elems--;
+		array->erase(it);
 		mutex_exit(&sync_thread_mutex);
 		return(TRUE);
 	}
@@ -1612,8 +1605,7 @@ struct sync_level_t{
 
 		/* If this slot was allocated then free the slot memory too. */
 		if (slot->levels != NULL) {
-			slot->levels->elems.erase(slot->levels->elems.begin(),slot->levels->elems.end());
-			free(slot->levels);
+			delete slot->levels;
 			slot->levels = NULL;
 		}
 	}
