tag/Builder: don't ignore the result of tag_pool_dup_item
Also, use RemoveAll() instead of directly clearing TagBuilder::items in most cases, as its elements represent references that must be released. Closes #1023
This commit is contained in:
		
				
					committed by
					
						
						Max Kellermann
					
				
			
			
				
	
			
			
			
						parent
						
							624c77ab43
						
					
				
				
					commit
					551c941b5a
				
			
							
								
								
									
										2
									
								
								NEWS
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								NEWS
									
									
									
									
									
								
							@@ -6,6 +6,8 @@ ver 0.22.10 (not yet released)
 | 
			
		||||
* input
 | 
			
		||||
  - curl: fix crash bug after stream with Icy metadata was closed by peer
 | 
			
		||||
  - tidal: remove defunct unmaintained plugin
 | 
			
		||||
* tags
 | 
			
		||||
  - fix crash caused by bug in TagBuilder and a few potential reference leaks
 | 
			
		||||
 | 
			
		||||
ver 0.22.9 (2021/06/23)
 | 
			
		||||
* database
 | 
			
		||||
 
 | 
			
		||||
@@ -69,8 +69,8 @@ TagBuilder::operator=(const TagBuilder &other) noexcept
 | 
			
		||||
 | 
			
		||||
	/* increment the tag pool refcounters */
 | 
			
		||||
	const std::lock_guard<Mutex> protect(tag_pool_lock);
 | 
			
		||||
	for (auto i : items)
 | 
			
		||||
		tag_pool_dup_item(i);
 | 
			
		||||
	for (auto &i : items)
 | 
			
		||||
		i = tag_pool_dup_item(i);
 | 
			
		||||
 | 
			
		||||
	return *this;
 | 
			
		||||
}
 | 
			
		||||
@@ -80,6 +80,8 @@ TagBuilder::operator=(TagBuilder &&other) noexcept
 | 
			
		||||
{
 | 
			
		||||
	duration = other.duration;
 | 
			
		||||
	has_playlist = other.has_playlist;
 | 
			
		||||
 | 
			
		||||
	RemoveAll();
 | 
			
		||||
	items = std::move(other.items);
 | 
			
		||||
 | 
			
		||||
	return *this;
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user