Ruslan Osmanov avatar Ruslan Osmanov committed 9c31cd9

Dev: fixed segfault caused by gc_collect_cycles

Comments (0)

Files changed (1)

  * This is a helper for derived watcher class objects. */
 static void php_ev_watcher_free_storage(ev_watcher *ptr TSRMLS_DC)
 {
-	zval        *data;
+	zval        *data, *self;
 	ev_watcher  *w_next  , *w_prev;
 	php_ev_loop *o_loop;
 
 		php_ev_watcher_data(ptr) = NULL;
 	}
 
-	if (php_ev_watcher_self(ptr)) {
-		zval_ptr_dtor(&php_ev_watcher_self(ptr));
+	self = php_ev_watcher_self(ptr);
+	if (self && Z_REFCOUNT_P(self) > 1) {
+		zval_ptr_dtor(&self);
 		php_ev_watcher_self(ptr) = NULL;
 	}
 }
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.