aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/linden/indra
diff options
context:
space:
mode:
Diffstat (limited to 'linden/indra')
-rw-r--r--linden/indra/newview/llappviewer.cpp44
-rw-r--r--linden/indra/newview/llfloateractivespeakers.cpp18
-rw-r--r--linden/indra/newview/releasenotes.txt8
3 files changed, 37 insertions, 33 deletions
diff --git a/linden/indra/newview/llappviewer.cpp b/linden/indra/newview/llappviewer.cpp
index e3d7073..30ac8fa 100644
--- a/linden/indra/newview/llappviewer.cpp
+++ b/linden/indra/newview/llappviewer.cpp
@@ -2610,43 +2610,36 @@ void LLAppViewer::setCrashBehavior(S32 cb)
2610 2610
2611bool LLAppViewer::anotherInstanceRunning() 2611bool LLAppViewer::anotherInstanceRunning()
2612{ 2612{
2613 // We create a marker file when the program starts and remove the file when it finishes. 2613 // We create a marker file when the program starts and remove the file when it finishes.
2614 // If the file is currently locked, that means another process is already running. 2614 // If the file is currently locked, that means another process is already running.
2615 2615
2616 std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME); 2616 std::string marker_file = gDirUtilp->getExpandedFilename(LL_PATH_LOGS, MARKER_FILE_NAME);
2617 llinfos << "Checking marker file for lock..." << llendl; 2617 llinfos << "Checking marker file for lock..." << llendl;
2618 2618
2619 // If file doesn't exist, we create it 2619 //Freeze case checks
2620 // If file does exist, try to get writing privileges 2620 apr_file_t* fMarker = ll_apr_file_open(marker_file, LL_APR_RB);
2621 FILE* fMarker = LLFile::fopen(marker_file.c_str(), "rb"); // Flawfinder: ignore
2622 if (fMarker != NULL) 2621 if (fMarker != NULL)
2623 { 2622 {
2624 // File exists, try opening with write permissions 2623 // File exists, try opening with write permissions
2625 fclose(fMarker); 2624 apr_file_close(fMarker);
2626 fMarker = LLFile::fopen(marker_file.c_str(), "wb"); // Flawfinder: ignore 2625 fMarker = ll_apr_file_open(marker_file, LL_APR_WB);
2627 if (fMarker == NULL) 2626 if (fMarker == NULL)
2628 { 2627 {
2628 // Another instance is running. Skip the rest of these operations.
2629 llinfos << "Marker file is locked." << llendl; 2629 llinfos << "Marker file is locked." << llendl;
2630 return TRUE; 2630 return TRUE;
2631 } 2631 }
2632 2632 if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1)
2633 // *FIX:Mani - rather than have this exception here,
2634 // LLFile::fopen() have consistent behavior across platforms?
2635#if LL_DARWIN || LL_LINUX || LL_SOLARIS
2636 // Try to lock it. On Mac, this is the only way to test if it's actually locked.
2637 if (flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1)
2638 { 2633 {
2639 // Lock failed - somebody else has it. 2634 apr_file_close(fMarker);
2640 fclose(fMarker);
2641 llinfos << "Marker file is locked." << llendl; 2635 llinfos << "Marker file is locked." << llendl;
2642 return TRUE; 2636 return TRUE;
2643 } 2637 }
2644#endif 2638 // No other instances; we'll lock this file now & delete on quit.
2645 fclose(fMarker); 2639 apr_file_close(fMarker);
2646 } 2640 }
2647 llinfos << "Marker file isn't locked." << llendl; 2641 llinfos << "Marker file isn't locked." << llendl;
2648 return FALSE; 2642 return FALSE;
2649
2650} 2643}
2651 2644
2652void LLAppViewer::initMarkerFile() 2645void LLAppViewer::initMarkerFile()
@@ -2688,25 +2681,10 @@ void LLAppViewer::initMarkerFile()
2688 ll_apr_file_remove(error_marker_file); 2681 ll_apr_file_remove(error_marker_file);
2689 2682
2690 //Freeze case checks 2683 //Freeze case checks
2684 if(anotherInstanceRunning()) return;
2691 fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB); 2685 fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_RB);
2692 if (fMarker != NULL) 2686 if (fMarker != NULL)
2693 { 2687 {
2694 // File exists, try opening with write permissions
2695 apr_file_close(fMarker);
2696 fMarker = ll_apr_file_open(mMarkerFileName, LL_APR_WB);
2697 if (fMarker == NULL)
2698 {
2699 // Another instance is running. Skip the rest of these operations.
2700 llinfos << "Marker file is locked." << llendl;
2701 return;
2702 }
2703 if (apr_file_lock(fMarker, APR_FLOCK_NONBLOCK | APR_FLOCK_EXCLUSIVE) != APR_SUCCESS) //flock(fileno(fMarker), LOCK_EX | LOCK_NB) == -1)
2704 {
2705 apr_file_close(fMarker);
2706 llinfos << "Marker file is locked." << llendl;
2707 return;
2708 }
2709 // No other instances; we'll lock this file now & delete on quit.
2710 apr_file_close(fMarker); 2688 apr_file_close(fMarker);
2711 gLastExecEvent = LAST_EXEC_FROZE; 2689 gLastExecEvent = LAST_EXEC_FROZE;
2712 llinfos << "Exec marker found: program froze on previous execution" << llendl; 2690 llinfos << "Exec marker found: program froze on previous execution" << llendl;
diff --git a/linden/indra/newview/llfloateractivespeakers.cpp b/linden/indra/newview/llfloateractivespeakers.cpp
index 8432d21..21b302a 100644
--- a/linden/indra/newview/llfloateractivespeakers.cpp
+++ b/linden/indra/newview/llfloateractivespeakers.cpp
@@ -486,11 +486,16 @@ void LLPanelActiveSpeakers::refreshSpeakers()
486 LLScrollListCell* name_cell = itemp->getColumn(1); 486 LLScrollListCell* name_cell = itemp->getColumn(1);
487 if (name_cell) 487 if (name_cell)
488 { 488 {
489 //FIXME: remove hard coding of font colors
489 if (speakerp->mStatus == LLSpeaker::STATUS_NOT_IN_CHANNEL) 490 if (speakerp->mStatus == LLSpeaker::STATUS_NOT_IN_CHANNEL)
490 { 491 {
491 // draw inactive speakers in gray 492 // draw inactive speakers in gray
492 name_cell->setColor(LLColor4::grey4); 493 name_cell->setColor(LLColor4::grey4);
493 } 494 }
495 else
496 {
497 name_cell->setColor(LLColor4::black);
498 }
494 499
495 LLString speaker_name; 500 LLString speaker_name;
496 if (speakerp->mDisplayName.empty()) 501 if (speakerp->mDisplayName.empty())
@@ -1294,6 +1299,19 @@ void LLActiveSpeakerMgr::updateSpeakerList()
1294 mVoiceChannel = LLVoiceChannel::getCurrentVoiceChannel(); 1299 mVoiceChannel = LLVoiceChannel::getCurrentVoiceChannel();
1295 } 1300 }
1296 LLSpeakerMgr::updateSpeakerList(); 1301 LLSpeakerMgr::updateSpeakerList();
1302
1303 // clean up text only speakers
1304 for (speaker_map_t::iterator speaker_it = mSpeakers.begin(); speaker_it != mSpeakers.end(); ++speaker_it)
1305 {
1306 LLUUID speaker_id = speaker_it->first;
1307 LLSpeaker* speakerp = speaker_it->second;
1308 if (speakerp->mStatus == LLSpeaker::STATUS_TEXT_ONLY)
1309 {
1310 // automatically flag text only speakers for removal
1311 speakerp->mStatus = LLSpeaker::STATUS_NOT_IN_CHANNEL;
1312 }
1313 }
1314
1297} 1315}
1298 1316
1299 1317
diff --git a/linden/indra/newview/releasenotes.txt b/linden/indra/newview/releasenotes.txt
index 7aa71f9..b7fb7e6 100644
--- a/linden/indra/newview/releasenotes.txt
+++ b/linden/indra/newview/releasenotes.txt
@@ -1,3 +1,11 @@
1Release Notes for Second Life 1.19.0(4) February 26th, 2008
2=====================================
3
4Fixes:
5* VWR-4921: not recognising in Linux that client is already running
6* VWR-4960: Active Speakers list does not clear in 1.19.0 (2)
7
8
1Release Notes for Second Life 1.19.0(3) February 22nd, 2008 9Release Notes for Second Life 1.19.0(3) February 22nd, 2008
2===================================== 10=====================================
3 11