you want to use a regular mutex around the finding the pointer part (hash look up etc). while the hash's mutex is locked you read lock the rwlock on the individual item. There are some functions in switch_core_hash now to specify a mutex andor if you want to fetch items read or write locked (see mod_rtmp's usage) On Thu, Aug 18, 2011 at 5:16 PM, Seven Du <dujinfang@gmail.com> wrote:
On Friday, August 19, 2011 at 1:35 AM, Christopher Rienzo wrote:
Even if that works, what happens when two threads that have a read lock attempt to switch to a write lock simultaneously? How does the thread know it got the write lock first and the data is unchanged?
maybe try_get_write_lock and let the latter one failed ? no idea. see following comments.
On Thu, Aug 18, 2011 at 12:20 PM, Anthony Minessale <anthony.minessale@gmail.com> wrote:
can't you just write lock it right away?
I think there's a potential race when two threads try to find and launch new listeners respectively. So I try to add a find_or_create_listener() to avoid race. It usually only need to create once unless 1) at the first time, 2) the node is broken so need a reconnect
http://pastebin.freeswitch.org/17091 ( I moved some codes, so just look for find_or_create_listener() )
So my concern is - isn't it expensive for a write lock than a read lock? Do you have other suggestions on this? or should I just get a write lock on not found and simply find again? I'm not sure if this is related to http://jira.freeswitch.org/browse/FS-3432 but want to fix the potential race first. let me know if you want to attach the patch to jira but it's not the final patch still need some further work. Thanks.
On Thu, Aug 18, 2011 at 7:19 AM, Christopher Rienzo <cmrienzo@gmail.com> wrote:
I forgot to mention that you'd have to repeat the find operation once you get the write lock since there is a small window between the unlock and lock where another thread may have created the item.
On Thu, Aug 18, 2011 at 6:42 AM, Christopher Rienzo <cmrienzo@gmail.com> wrote:
Unlock the read lock and then lock as a write lock.
On Aug 17, 2011 8:20 PM, "Seven Du" <dujinfang@gmail.com> wrote:
Hi,
Just wondering how to upgrade a read lock to a write lock, say I do a find_or_create_item_in_queue() switch_thread_rwlock_rdlock(lock); find an item from queue, if not found, create one switch_thread_rwlock_upgrade_to_wrlock(lock); write switch_thread_rwlock_unlock(lock); Thanks -- Seven Du About: http://about.me/dujinfang Blog: http://www.dujinfang.com Proj: http://www.freeswitch.org.cn Sent with Sparrow
_______________________________________________ Join us at ClueCon 2011, Aug 9-11, Chicago http://www.cluecon.com 877-7-4ACLUE
FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org
_______________________________________________ Join us at ClueCon 2011, Aug 9-11, Chicago http://www.cluecon.com 877-7-4ACLUE
FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org
-- Anthony Minessale II
FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire
AIM: anthm MSN:anthony_minessale@hotmail.com GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch
FreeSWITCH Developer Conference sip:888@conference.freeswitch.org googletalk:conf+888@conference.freeswitch.org pstn:+19193869900
_______________________________________________ Join us at ClueCon 2011, Aug 9-11, Chicago http://www.cluecon.com 877-7-4ACLUE
FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org
_______________________________________________ Join us at ClueCon 2011, Aug 9-11, Chicago http://www.cluecon.com 877-7-4ACLUE
FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org
_______________________________________________ Join us at ClueCon 2011, Aug 9-11, Chicago http://www.cluecon.com 877-7-4ACLUE
FreeSWITCH-dev mailing list FreeSWITCH-dev@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-dev UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-dev http://www.freeswitch.org
-- Anthony Minessale II FreeSWITCH http://www.freeswitch.org/ ClueCon http://www.cluecon.com/ Twitter: http://twitter.com/FreeSWITCH_wire AIM: anthm MSN:anthony_minessale@hotmail.com GTALK/JABBER/PAYPAL:anthony.minessale@gmail.com IRC: irc.freenode.net #freeswitch FreeSWITCH Developer Conference sip:888@conference.freeswitch.org googletalk:conf+888@conference.freeswitch.org pstn:+19193869900