Max Kellermann 
							
						 
					 
					
						
						
							
						
						e599b86424 
					 
					
						
						
							
							event/Loop: try to avoid the WakeFD when adding DeferredMonitor  
						
						... 
						
						
						
						Add a flag that indicates whether the EventLoop is currently "busy".
As long as that flag is set, it does not need to be woken up - we can
simply add the DeferredMonitor to the list, and it will be caught by
EventLoop very soon.  This eliminates nearly all of the
DeferredMonitor overhead when compared to IdleMonitor, rendering
IdleMonitor mostly obsolete. 
						
						
					 
					
						2014-01-05 02:15:34 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						da9e584921 
					 
					
						
						
							
							event/Loop: combine multiple WakeFD::Write() calls  
						
						... 
						
						
						
						Reduce DeferredMonitor overhead. 
						
						
					 
					
						2014-01-05 02:15:10 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						e9d764d7ad 
					 
					
						
						
							
							event/Loop: add attribute "again"  
						
						... 
						
						
						
						Improved support for added events. 
						
						
					 
					
						2014-01-05 02:15:01 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						6268955778 
					 
					
						
						
							
							event/Loop: add thread-safety assertions  
						
						
						
						
					 
					
						2014-01-05 02:14:31 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						4ddfc6e9a2 
					 
					
						
						
							
							output/httpd: move the clients.clear() call to the IOThread  
						
						... 
						
						
						
						This call is not thread-safe. 
						
						
					 
					
						2014-01-05 02:13:35 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						dcbc05a9cd 
					 
					
						
						
							
							output/httpd: import GetEventLoop()  
						
						
						
						
					 
					
						2014-01-05 02:13:21 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						4c705334fa 
					 
					
						
						
							
							ClientList: use "delete" instead of Client::Close()  
						
						... 
						
						
						
						Client::Close() installs a TimeoutMonitor, which is not something we
should do during shutdown. 
						
						
					 
					
						2014-01-05 02:07:49 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						c12da599b9 
					 
					
						
						
							
							event/Loop: remove obsolete assertion  
						
						
						
						
					 
					
						2014-01-05 01:41:03 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f685a48008 
					 
					
						
						
							
							event/Loop: move code to HandleDeferred()  
						
						
						
						
					 
					
						2014-01-05 01:35:12 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						7c15e41da5 
					 
					
						
						
							
							event/MultiSocketMonitor: add missing <algorithm> include  
						
						... 
						
						
						
						For std::find_if(). 
						
						
					 
					
						2014-01-05 01:35:12 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						7b540f0226 
					 
					
						
						
							
							event/MultiSocketMonitor: add method ReplaceSocketList()  
						
						... 
						
						
						
						Move code from AlsaMixerPlugin. 
						
						
					 
					
						2014-01-05 01:28:36 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						e29c22e662 
					 
					
						
						
							
							event/MultiSocketMonitor: include cleanup  
						
						
						
						
					 
					
						2014-01-05 00:39:29 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f0d3b47ad8 
					 
					
						
						
							
							event/Loop: remove the GLib implementation  
						
						... 
						
						
						
						Now that the remaining known bugs in poll() implementation are fixed,
we can go on without the GLib implementation. 
						
						
					 
					
						2014-01-04 19:31:23 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						bfe7533546 
					 
					
						
						
							
							output/httpd: move Bind()/Unbind() to the IOThread  
						
						... 
						
						
						
						Fixes more thread-safety bugs. 
						
						
					 
					
						2014-01-04 19:29:51 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						880bf17dae 
					 
					
						
						
							
							event/poll: eliminate one vector::size() call  
						
						
						
						
					 
					
						2014-01-04 19:10:21 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						c9da3363a0 
					 
					
						
						
							
							output/httpd: move all broadcast operations to the IOThread  
						
						... 
						
						
						
						Add a Page queue to class HttpdOutput, and use DeferredMonitor to
flush this queue inside the IOThread.  This fixes a thread-safety
issue: much of EventLoop is not thread-safe, and the httpd plugin
ignored that problem. 
						
						
					 
					
						2014-01-04 18:22:55 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						9bd4ed3e60 
					 
					
						
						
							
							output/httpd: use the IOThread  
						
						... 
						
						
						
						Do all I/O in the IOThread and not in the main thread.  This solves an
upcoming deadlock problem. 
						
						
					 
					
						2014-01-04 18:21:40 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						68fcc19565 
					 
					
						
						
							
							output/httpd: move queue size check to HttpdClient::PushPage()  
						
						... 
						
						
						
						Don't let the server care for client problems. 
						
						
					 
					
						2014-01-04 17:42:03 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						8e4efd071e 
					 
					
						
						
							
							output/httpd: wrap the std::list in std::queue  
						
						
						
						
					 
					
						2014-01-04 17:12:59 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f2ad9f6fad 
					 
					
						
						
							
							output/httpd: merge duplicate code to ClearQueue()  
						
						
						
						
					 
					
						2014-01-04 17:11:22 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						968c5eb767 
					 
					
						
						
							
							output/httpd: keep track of queue size  
						
						... 
						
						
						
						Don't iterate the std::list each time. 
						
						
					 
					
						2014-01-04 17:06:05 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						19424e95db 
					 
					
						
						
							
							event/Loop: remove bogus "!quit" assertion  
						
						... 
						
						
						
						Commit 1f11959 
						
						
					 
					
						2014-01-04 17:06:05 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						0f9ef2506f 
					 
					
						
						
							
							event/Loop: remove unused method AddCall()  
						
						
						
						
					 
					
						2014-01-04 16:00:45 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						1f1195975f 
					 
					
						
						
							
							event/Loop: non-recursive Break() implementation  
						
						... 
						
						
						
						Simply set the "quit" flag and wake up the thread.  This works even if
we're inside this thread.  Setting "quit" to a new value without mutex
protection is usually not safe, but good enough here. 
						
						
					 
					
						2014-01-04 15:59:00 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						87fce8ef27 
					 
					
						
						
							
							mixer/alsa: use DeferredMonitor to update file descriptors  
						
						... 
						
						
						
						EventLoop::AddCall() and EventLoop::AddIdle() are unsafe, because we
can't cancel those calls. 
						
						
					 
					
						2014-01-04 15:58:59 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						d2a4f64fd6 
					 
					
						
						
							
							event/BlockingCall: always use DeferredMonitor internally  
						
						... 
						
						
						
						There is no advantage of using EventLoop::AddCall(), now that
DeferredMonitor is thread-safe. 
						
						
					 
					
						2014-01-04 15:58:59 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						a357d84dce 
					 
					
						
						
							
							event/DeferredMonitor: make fully thread-safe  
						
						... 
						
						
						
						Instead of creating a new eventfd for each DeferredMonitor instance,
reuse EventLoop's eventfd, and add a std::list to EventLoop that
manages the list of pending DeferredMonitors.  This std::list is
protected by the same mutex as the "calls" list.
The bottom line is: reduced overhead because the per-instance eventfd
was eliminated, slightly added overhead due to Mutex usage (but
negligible), and we're thread-safe now.
This subsystem is now good enough to replace EventLoop::AddCall(). 
						
						
					 
					
						2014-01-04 15:58:59 +01:00 
						 
				 
			
				
					
						
							
							
								James McGlashan (DarkFox) 
							
						 
					 
					
						
						
							
						
						48c96bbaea 
					 
					
						
						
							
							Added application key for soundcloud plugin  
						
						
						
						
					 
					
						2014-01-04 14:01:17 +01:00 
						 
				 
			
				
					
						
							
							
								James McGlashan (DarkFox) 
							
						 
					 
					
						
						
							
						
						c666794ce3 
					 
					
						
						
							
							Added soundcloud documentation  
						
						
						
						
					 
					
						2014-01-04 14:01:12 +01:00 
						 
				 
			
				
					
						
							
							
								James McGlashan (DarkFox) 
							
						 
					 
					
						
						
							
						
						1ee3df6976 
					 
					
						
						
							
							Added user and search paramaters for SoundCloud plugin  
						
						
						
						
					 
					
						2014-01-04 13:36:24 +01:00 
						 
				 
			
				
					
						
							
							
								James McGlashan (DarkFox) 
							
						 
					 
					
						
						
							
						
						d4dea53ae9 
					 
					
						
						
							
							http -> https for SoundCloud plugin  
						
						
						
						
					 
					
						2014-01-02 12:29:45 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						d477a9222e 
					 
					
						
						
							
							output/httpd: change "struct" to "class"  
						
						
						
						
					 
					
						2013-12-31 17:04:40 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						69a9d29190 
					 
					
						
						
							
							output/httpd: move code to methods Delay(), Play(), Cancel()  
						
						
						
						
					 
					
						2013-12-31 17:01:08 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						e2425592b6 
					 
					
						
						
							
							output/httpd: move Cast() into the class  
						
						
						
						
					 
					
						2013-12-31 16:59:24 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						964b2661d8 
					 
					
						
						
							
							output/httpd: add methods Init(), Finish()  
						
						
						
						
					 
					
						2013-12-31 16:55:26 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						8b65b524d5 
					 
					
						
						
							
							output/httpd: use reference instead of pointer  
						
						
						
						
					 
					
						2013-12-31 16:32:33 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f1ac2cd336 
					 
					
						
						
							
							output/httpd: make the HttpdClient base class "private"  
						
						
						
						
					 
					
						2013-12-31 16:24:51 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						e73d0df2b6 
					 
					
						
						
							
							event/*Monitor: document as not being thread-safe  
						
						
						
						
					 
					
						2013-12-31 15:59:41 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						af3f483924 
					 
					
						
						
							
							event/Loop: document that AddCall() is thread-safe  
						
						
						
						
					 
					
						2013-12-31 15:31:59 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						809b0eb1f5 
					 
					
						
						
							
							command: "lsinfo" and "readcomments" allowed for remote files  
						
						
						
						
					 
					
						2013-12-29 18:25:32 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						b5f3bfce92 
					 
					
						
						
							
							SongUpdate: read tags from songs in an archive  
						
						... 
						
						
						
						Add the TagStream.cxx library, similar to TagFile.cxx, and use it to
load tags from song files inside archives. 
						
						
					 
					
						2013-12-29 18:15:30 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						aeb2baa495 
					 
					
						
						
							
							InputStream: add static method OpenReady()  
						
						... 
						
						
						
						Merge some duplicate code. 
						
						
					 
					
						2013-12-29 18:08:49 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						afc70c120e 
					 
					
						
						
							
							util/UriUtil: uri_get_suffix() fails if name begins with dot  
						
						... 
						
						
						
						A file called ".jpg" is not a JPEG file with an empty name; it is
merely a hidden file. 
						
						
					 
					
						2013-12-29 17:40:51 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						ea9aff1d3f 
					 
					
						
						
							
							TagFile: rewind the stream before trying the next plugin  
						
						... 
						
						
						
						Got lost in commit c97685fe 
						
						
					 
					
						2013-12-29 17:09:59 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						cecae419fb 
					 
					
						
						
							
							DecoderList: add "pure" attribute  
						
						
						
						
					 
					
						2013-12-29 17:06:59 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						df4db50904 
					 
					
						
						
							
							DecoderList: add function decoder_plugins_supports_suffix()  
						
						... 
						
						
						
						Replaces decoder_plugin_from_suffix(). 
						
						
					 
					
						2013-12-29 16:59:57 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						decc4002a0 
					 
					
						
						
							
							DecoderThread: use decoder_plugins_try()  
						
						... 
						
						
						
						.. instead of decoder_plugin_from_suffix().  This reduces overhead by
walking the array only once. 
						
						
					 
					
						2013-12-29 16:51:18 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						5bb563e3bc 
					 
					
						
						
							
							UpdateContainer: pass suffix instead of DecoderPlugin  
						
						... 
						
						
						
						Instead of using the first DecoderPlugin that supports the suffix, use
the first one that actually implements the "container_scan" method. 
						
						
					 
					
						2013-12-29 16:46:02 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						9be82891b0 
					 
					
						
						
							
							TagFile: pass reference instead of pointer  
						
						
						
						
					 
					
						2013-12-29 16:24:04 +01:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						c97685fe6c 
					 
					
						
						
							
							TagFile: use decoder_plugins_try()  
						
						... 
						
						
						
						.. instead of decoder_plugin_from_suffix().  This reduces overhead by
walking the array only once. 
						
						
					 
					
						2013-12-29 16:13:11 +01:00